SUM(조건식)을 사용하면 조건을 만족하는 행의 수를 구할 수 있습니다. 조건식은 참(1)/거짓(0)으로 평가되므로 합산이 곧 개수가 됩니다.
테이블 생성 및 데이터 삽입
mysql> CREATE TABLE DemoTable1790 (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(20),
-> Score INT
-> );
Query OK, 0 rows affected (0.94 sec)
mysql> INSERT INTO DemoTable1790(Name,Score) VALUES('Chris',45);
Query OK, 1 row affected (0.38 sec)
mysql> INSERT INTO DemoTable1790(Name,Score) VALUES('David',55);
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable1790(Name,Score) VALUES('David',98);
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable1790(Name,Score) VALUES('Chris',91);
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable1790(Name,Score) VALUES('Mike',99);
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable1790(Name,Score) VALUES('Carol',55);
Query OK, 1 row affected (0.35 sec)
데이터 조회
mysql> SELECT * FROM DemoTable1790;
+----+-------+-------+ | Id | Name | Score | +----+-------+-------+ | 1 | Chris | 45 | | 2 | David | 55 | | 3 | David | 98 | | 4 | Chris | 91 | | 5 | Mike | 99 | | 6 | Carol | 55 | +----+-------+-------+ 6 rows in set (0.00 sec)
한 쿼리로 두 가지 카운트 동시 조회
mysql> SELECT SUM(Name='Chris'), SUM(Score=55) FROM DemoTable1790;
+-------------------+---------------+ | SUM(Name='Chris') | SUM(Score=55) | +-------------------+---------------+ | 2 | 2 | +-------------------+---------------+ 1 row in set (0.00 sec)
원리: Name='Chris'는 참이면 1, 거짓이면 0. SUM()으로 더하면 개수가 됩니다. COUNT(CASE WHEN Name='Chris' THEN 1 END)와 동일하지만 더 간결합니다. 여러 조건 카운트 시 유용.