MySQL의 집계 함수를 IF() 함수와 함께 사용하면 원하는 특정 결과를 손쉽게 얻을 수 있습니다. 조건에 따라 데이터를 분류하거나 카운트해야 하는 상황에서 특히 유용한 기법입니다. 아래에서는 SUM()과 COUNT() 집계 함수를 IF() 함수와 결합한 실제 예시를 살펴보겠습니다.
SUM() 함수와 IF() 함수의 결합
mysql> Select SUM(IF(Language = 'English', 1, 0)) As English, SUM(IF(Language <> 'English',1,0)) AS "Non-English" from Students; +---------+-------------+ | English | Non-English | +---------+-------------+ | 5 | 4 | +---------+-------------+ 1 row in set (0.00 sec)
위 쿼리는 SUM() 집계 함수와 IF() 함수를 결합하여 'Students' 테이블에서 영어를 구사하는 학생과 그렇지 않은 학생의 수를 각각 집계합니다. IF() 함수는 조건(Language = 'English')이 참일 때 1을, 거짓일 때 0을 반환하고, SUM()이 이 값들을 모두 더해 조건별 합계를 계산합니다.
COUNT() 함수와 IF() 함수의 결합
mysql> Select COUNT(IF(country = 'USA', 1, NULL))AS USA,
-> COUNT(IF(country = 'UK', 1, NULL))AS UK,
-> COUNT(IF(country = 'France', 1, NULL))AS France,
-> COUNT(IF(country = 'Russia', 1, NULL))AS Russia,
-> COUNT(IF(country = 'Australia', 1, NULL))AS Australia,
-> COUNT(IF(country = 'INDIA', 1, NULL))AS INDIA,
-> COUNT(IF(country = 'NZ', 1, NULL))AS NZ FROM Students;
+-----+----+--------+--------+-----------+-------+----+
| USA | UK | France | Russia | Australia | INDIA | NZ |
+-----+----+--------+--------+-----------+-------+----+
| 2 | 1 | 1 | 1 | 1 | 2 | 1 |
+-----+----+--------+--------+-----------+-------+----+
1 row in set (0.07 sec)위 쿼리는 COUNT() 집계 함수와 IF() 함수를 결합하여 'Students' 테이블에 저장된 국가별 학생 수를 한 번에 집계합니다. 여기서 주목할 점은 IF() 함수의 세 번째 인자로 NULL을 사용했다는 것입니다. COUNT() 함수는 NULL이 아닌 값만 계산하기 때문에, 조건을 만족하는 행만 정확하게 카운트할 수 있습니다.
정리: SUM과 COUNT의 차이점
IF() 함수와 집계 함수를 결합할 때는 목적에 따라 세 번째 인자를 다르게 지정하는 것이 핵심입니다.
- SUM()과 결합할 때: 거짓일 경우
0을 반환하도록 지정합니다. 0을 더해도 합계에 영향이 없기 때문입니다. - COUNT()와 결합할 때: 거짓일 경우
NULL을 반환하도록 지정합니다. COUNT()는 NULL을 무시하므로 조건에 맞는 행만 셀 수 있습니다.
이 패턴을 활용하면 여러 개의 개별 쿼리를 실행하거나 복잡한 GROUP BY 절을 작성하지 않고도, 하나의 쿼리만으로 다양한 조건부 통계를 동시에 얻을 수 있어 쿼리 성능과 가독성 모두를 높일 수 있습니다.