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 = '삽잡이', null, 1)) AS result FROM people_finder; | cs |
예... 생각보다 쉬웠습니다...
역시 머리가 과부하가 걸리면...
좀 고생좀 하나봅니다...
IF문을 COUNT() 함수 안에 두면 되는 것을....
이 난리를...
으아~~~
'삽질의 현장 > - DataBase' 카테고리의 다른 글
[삽잡이::sql]mysql 테이블을 가지고 놀자! ALTER TABLE (0) | 2016.07.13 |
---|---|
[삽잡이::sql] CASE WHEN THEN WHEN THEN ELSE END !? (0) | 2016.07.02 |
[삽잡이::sql] 쿼리문에서도 조건을 걸 수 있다! IF (0) | 2016.06.28 |
[삽잡이::sql] 중복을 제거하라! DISTINCT (0) | 2016.06.28 |
[삽잡이::sql] NULL이라면? 다른 녀석을 보여주지! IFNULL (0) | 2016.06.27 |