Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 집계 함수와 IF() 함수를 결합하여 조건별 데이터 집계하기

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 절을 작성하지 않고도, 하나의 쿼리만으로 다양한 조건부 통계를 동시에 얻을 수 있어 쿼리 성능과 가독성 모두를 높일 수 있습니다.