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

MySQL에서 조건에 맞는 레코드 개수 세기: SUM() 함수 활용 방법

개요

레코드 개수를 셀 때는 집계 함수 SUM()을 사용하고, 조건을 적용한 개수를 구하려면 WHERE 절로 조건을 지정해야 합니다. 이번 글에서는 실제 예제를 통해 조건부 카운트를 구하는 방법을 단계별로 알아보겠습니다. 먼저 예제로 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable1515
    -> (
    -> ClientId varchar(10),
    -> ClientName varchar(20)
    -> );
Query OK, 0 rows affected (0.53 sec)

테이블에 데이터 삽입하기

insert 명령어를 사용해 테이블에 레코드를 삽입합니다.

mysql> insert into DemoTable1515 values('CLI-101','Chris');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1515 values('CLI-110','David');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1515 values('CLI-101','Bob');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1515 values('CLI-101','Sam');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1515 values('CLI-101','Sam');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1515 values('CLI-101','Mike');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1515 values('CLI-130','Mike');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1515 values('CLI-101','Chris');
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable1515 values('CLI-101','Sam');
Query OK, 1 row affected (0.18 sec)

저장된 데이터 확인하기

select 문을 사용해 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable1515;

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

+----------+------------+
| ClientId | ClientName |
+----------+------------+
| CLI-101  |    Chris   |
| CLI-110  |    David   |
| CLI-101  |      Bob   |
| CLI-101  |      Sam   |
| CLI-101  |      Sam   |
| CLI-101  |     Mike   |
| CLI-130  |     Mike   |
| CLI-101  |     Chris  |
| CLI-101  |      Sam   |
+----------+------------+
9 rows in set (0.00 sec)

결과를 보면 전체 9개 레코드 중 CLI-101에 해당하는 레코드는 7개이며, 그중 이름이 'Sam'인 레코드는 3개입니다. 이제 이 두 값을 하나의 쿼리로 동시에 조회하는 방법을 살펴보겠습니다.

조건을 적용해 개수 세기

다음은 조건을 적용해 개수를 세는 쿼리입니다.

mysql> select ClientId,sum(ClientName='Sam') as NameOn101Id,count(*) as TotalNameOn101 from DemoTable1515
    -> where ClientId='CLI-101';

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

+----------+-------------+----------------+
| ClientId | NameOn101Id | TotalNameOn101 |
+----------+-------------+----------------+
| CLI-101  |           3 |              7 |
+----------+-------------+----------------+
1 row in set (0.00 sec)

핵심 원리: 불리언 표현식의 활용

MySQL에서는 ClientName='Sam'과 같은 비교 표현식이 조건이 참일 때 1, 거짓일 때 0을 반환합니다. 따라서 이 표현식을 SUM() 함수로 감싸면 특정 조건을 만족하는 행의 개수를 간단하게 구할 수 있습니다.

또한 COUNT(*)를 함께 사용하면 WHERE 절로 필터링된 전체 행 개수와 특정 조건을 만족하는 행 개수를 한 번의 쿼리로 동시에 확인할 수 있습니다. 덕분에 서브쿼리나 여러 번의 조회 없이도 효율적으로 통계를 처리할 수 있습니다.