삽질의 현장/- DataBase

[삽잡이::sql]count() 와 IF() 사용 주의사항! 이라 쓰고 삽질이라 읽는다

shovelman 2016. 6. 28. 22:42



1
SELECT IF(name = '삽잡이''Yes''No') AS result FROM people_finder;
cs


이와 같은 Query문을 통해 

각 레코드에 있는 컬럼(name)의 값이

삽잡이일 경우 Yes를 그리고 아닐 경우 No를 나타낼 수 있습니다.


해당 Query문의 결과는 

아마 이와 같이 출력될 것입니다.



역시 삽잡이는 유일무이하군요...



그런데 말입니다...

만약, 삽잡이가 있는 레코드를 제외한 

나머지 레코드들의 수를 계산해야할 필요성이 생겼습니다.


1
SELECT IF(name = '삽잡이', COUNT(*), COUNT(*)-1) AS result FROM people_finder;
cs


이와 같이 Query문을 작성했지요...


그런데... 삽잡이는 분명 있는데 말입니다.

계속 거짓으로 출력되는 것이 아니겠습니까...



위에 개수 새보면 8개인데요...

Yes 하나 빼면 7이 나와야되는데 

계속해서 8이 나오는 것 아니겠습니까....

맨 마지막 레코드의 name 값이 삽잡이인데 말이지요!!!



미치고 팔짝 뛸 노릇이었습니다...

이걸로 또 삽질하며 부여잡고 있었지요....


멍청한 삽잡이~~~ 


집에 돌아와서 잠시 묵상(?)에 잠겨있는데...

역시 사람은 머리를 식혀줘야합니다...


그땐 과부하였어~~~~ 으아~~~ 


COUNT() 함수는 조건에 match되는 rows의 수를 return 합니다.


즉, IF문을 통해 처음 레코드의 값의 참/거짓 유무를 결정한 뒤

COUNT() 함수가 실행되며 rows의 수를 return 하게 되는 것입니다.


그래요.... return....

그래.... 첫 레코드 보고 바로 return 하는 것이었습니다...



이걸로 얼마나 삽질을 한거야~~~~ 으아~~~ 


그렇다면... 어떻게 해야할까요?

조건에 맞는 값을 뺀 

나머지 rows의 개수를 어떻게 구한단 말입니까!!!!


1
SELECT COUNT(IF(name = '삽잡이'null1)) AS result FROM people_finder;
cs


예... 생각보다 쉬웠습니다...

역시 머리가 과부하가 걸리면...

좀 고생좀 하나봅니다...



IF문을 COUNT() 함수 안에 두면 되는 것을....

이 난리를...



으아~~~