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

MySQL SUM() 함수로 특정 값의 발생 횟수 한 번에 계산하기

개요

MySQL에서 특정 값(예: 'John', 'Robert' 등)이 컬럼에 몇 번 등장하는지 확인하고 싶을 때가 있습니다. 이럴 때 SUM() 집계 함수를 활용하면 여러 개의 고유 값별 발생 횟수를 단 한 번의 쿼리로 동시에 계산할 수 있습니다.

1. 샘플 테이블 생성

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

mysql> create table DemoTable636 (
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentFirstName varchar(100)
);
Query OK, 0 rows affected (0.51 sec)

2. 데이터 삽입

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다. 의도적으로 중복되는 이름('John', 'Robert')을 포함시켰습니다.

mysql> insert into DemoTable636(StudentFirstName) values('John');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable636(StudentFirstName) values('Robert');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable636(StudentFirstName) values('Robert');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable636(StudentFirstName) values('Sam');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable636(StudentFirstName) values('Mike');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable636(StudentFirstName) values('John');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable636(StudentFirstName) values('Robert');
Query OK, 1 row affected (0.16 sec)

3. 전체 데이터 확인

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

mysql> select *from DemoTable636;

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

+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
|         1 | John             |
|         2 | Robert           |
|         3 | Robert           |
|         4 | Sam              |
|         5 | Mike             |
|         6 | John             |
|         7 | Robert           |
+-----------+------------------+
7 rows in set (0.00 sec)

4. 알려진 고유 값의 발생 횟수 계산

다음은 SUM() 함수를 사용해 미리 알고 있는(열거 가능한) 고유 값들이 각각 몇 번 나타나는지 계산하는 쿼리입니다.

mysql> select
    sum(StudentFirstName='John') AS JOHN_COUNT,
    sum(StudentFirstName='Robert') AS ROBERT_COUNT,
    sum(StudentFirstName='Sam') AS SAM_COUNT,
    sum(StudentFirstName='Mike') AS MIKE_COUNT
    from DemoTable636;

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

+------------+--------------+-----------+------------+
| JOHN_COUNT | ROBERT_COUNT | SAM_COUNT | MIKE_COUNT |
+------------+--------------+-----------+------------+
|          2 |            3 | 1          | 1          |
+------------+--------------+-----------+------------+
1 row in set (0.00 sec)

동작 원리

이 기법이 작동하는 이유는 MySQL에서 불리언 표현식(StudentFirstName='John')이 조건을 만족하면 1, 만족하지 않으면 0으로 평가되기 때문입니다. SUM() 함수가 이 값들을 모두 더하면 자연스럽게 해당 조건을 만족하는 행의 개수, 즉 발생 횟수가 됩니다.

이 방식은 COUNT(CASE WHEN ... THEN 1 END) 패턴과 동일한 결과를 내지만 코드가 더 간결하다는 장점이 있습니다. 다만 열거할 값이 매우 많거나 사전에 값을 알 수 없는 경우에는 GROUP BY 절을 사용해 값별 개수를 집계하는 것이 더 적합합니다.