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

MySQL 쿼리에서 CASE 조건과 함께 COUNT를 활용하는 방법

MySQL에서는 CASE WHEN 구문을 활용해 특정 조건을 만족하는 행만 집계할 수 있습니다. COUNT() 함수 내부에 CASE 조건을 넣으면, 조건을 충족하는 경우만 카운트됩니다. 이번 글에서는 예제 테이블을 만들고 실제 동작 과정을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 테스트에 사용할 테이블을 생성합니다.

mysql> create table DemoTable1374
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20),
-> Score int
-> );
Query OK, 0 rows affected (0.61 sec)

2. 샘플 데이터 삽입

INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable1374(Name,Score) values('Chris',45);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1374(Name,Score) values('David',78);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1374(Name,Score) values('Bob',45);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1374(Name,Score) values('Mike',75);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1374(Name,Score) values('Carol',45);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1374(Name,Score) values('Adam',89);
Query OK, 1 row affected (0.18 sec)

3. 전체 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1374;

위 쿼리는 다음과 같은 결과를 출력합니다.

+----+-------+-------+
| Id | Name | Score |
+----+-------+-------+
| 1 | Chris | 45 |
| 2 | David | 78 |
| 3 | Bob | 45 |
| 4 | Mike | 75 |
| 5 | Carol | 45 |
| 6 | Adam | 89 |
+----+-------+-------+
6 rows in set (0.00 sec)

4. CASE WHEN 조건과 함께 COUNT 사용하기

이제 CASE WHEN을 이용해 특정 조건(Score = 45)을 설정하고 해당 조건을 만족하는 행의 개수를 세는 쿼리를 실행합니다.

mysql> select count( case when Score=45 then 1 else NULL end) as SpecificCondition from DemoTable1374;

실행 결과는 다음과 같습니다.

+-------------------+
| SpecificCondition |
+-------------------+
| 3 |
+-------------------+
1 row in set (0.00 sec)

동작 원리 정리

COUNT() 함수는 NULL 값을 제외한 값만 계산하기 때문에, CASE WHEN에서 조건을 만족하면 1을 반환하고 그렇지 않으면 NULL을 반환하도록 작성하면 조건에 맞는 행만 정확히 집계됩니다. 위 예제에서는 Score가 45인 레코드가 Chris, Bob, Carol 총 3개이므로 결과값이 3으로 출력된 것입니다.

참고로 MySQL에서는 SUM(Score=45)처럼 조건식을 SUM에 직접 넣거나, COUNT(IF(Score=45, 1, NULL)) 형태로 IF 함수를 사용하는 방법도 동일한 결과를 얻을 수 있으니 상황에 맞게 활용해 보시기 바랍니다.