MySQL COUNT()와 DISTINCT 조합
네, MySQL에서 COUNT() 함수와 DISTINCT> 키워드를 함께 사용하면 중복을 제거한 고유(distinct) 행의 개수만 손쉽게 조회할 수 있습니다.
기본 문법은 다음과 같습니다.
SELECT COUNT(DISTINCT yourColumnName) AS anyVariableName FROM yourTableName;
위 문법을 실제로 이해하기 위해 예제 테이블을 하나 만들어 보겠습니다.
1. 테이블 생성
테이블을 생성하는 쿼리는 다음과 같습니다.
mysql> create table CountDistinctDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (3.11 sec)
2. 샘플 데이터 삽입
INSERT 명령을 사용해 테이블에 여러 개의 레코드를 삽입합니다. 일부러 'Carol', 'Bob', 'John'처럼 중복되는 이름을 포함시켰습니다.
mysql> insert into CountDistinctDemo(Name) values('Carol');
Query OK, 1 row affected (0.48 sec)
mysql> insert into CountDistinctDemo(Name) values('Bob');
Query OK, 1 row affected (0.43 sec)
mysql> insert into CountDistinctDemo(Name) values('Carol');
Query OK, 1 row affected (0.26 sec)
mysql> insert into CountDistinctDemo(Name) values('John');
Query OK, 1 row affected (0.27 sec)
mysql> insert into CountDistinctDemo(Name) values('Bob');
Query OK, 1 row affected (0.35 sec)
mysql> insert into CountDistinctDemo(Name) values('Carol');
Query OK, 1 row affected (0.98 sec)
mysql> insert into CountDistinctDemo(Name) values('John');
Query OK, 1 row affected (0.26 sec)
mysql> insert into CountDistinctDemo(Name) values('Sam');
Query OK, 1 row affected (0.14 sec)
mysql> insert into CountDistinctDemo(Name) values('Mike');
Query OK, 1 row affected (0.53 sec)
mysql> insert into CountDistinctDemo(Name) values('Carol');
Query OK, 1 row affected (0.31 sec)
mysql> insert into CountDistinctDemo(Name) values('David');
Query OK, 1 row affected (0.40 sec)3. 저장된 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from CountDistinctDemo;
실행 결과는 다음과 같습니다.
+----+-------+
| Id | Name |
+----+-------+
| 1 | Carol |
| 2 | Bob |
| 3 | Carol |
| 4 | John |
| 5 | Bob |
| 6 | Carol |
| 7 | John |
| 8 | Sam |
| 9 | Mike |
| 10 | Carol |
| 11 | David |
+----+-------+
11 rows in set (0.07 sec)
4. DISTINCT 없이 COUNT() 사용하기
DISTINCT를 사용하지 않으면 COUNT() 함수는 중복을 포함한 전체 행의 개수를 반환합니다.
mysql> select count(Name) as TotalName from CountDistinctDemo;
실행 결과는 아래와 같으며, 전체 11개의 행이 집계됩니다.
+-----------+
| TotalName |
+-----------+
| 11 |
+-----------+
1 row in set (0.04 sec)
5. COUNT()와 DISTINCT 함께 사용하기
이제 COUNT()와 DISTINCT를 함께 사용하면 이름의 중복이 제거된 고유 값의 개수만 얻을 수 있습니다.
mysql> SELECT COUNT(DISTINCT Name) as UniqueName FROM CountDistinctDemo;
실행 결과는 다음과 같습니다. 중복된 이름(Carol 4개, Bob 2개, John 2개)이 하나씩만 계산되어 총 6개가 반환됩니다.
+------------+
| UniqueName |
+------------+
| 6 |
+------------+
1 row in set (0.00 sec)
정리
MySQL에서 COUNT(DISTINCT 컬럼명) 형태로 작성하면 해당 컬럼의 중복 값을 자동으로 제거하고 고유한 값의 개수만 집계할 수 있습니다. 통계 조회나 유니크 사용자 수 계산 등 실무에서 매우 자주 활용되는 패턴이므로 꼭 익혀두는 것이 좋습니다.