MySQL에서 열의 고유 레코드 개수 구하기
MySQL에서 특정 열의 고유(중복 제거) 레코드 개수를 계산하려면 집계 함수 COUNT(*)와 GROUP BY 절을 함께 사용하면 됩니다. 이때 중복 값을 제거하려면 COUNT(DISTINCT 컬럼명) 형태로 작성하는 것이 핵심입니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable ( UserName varchar(100), UserPostMessage text ); Query OK, 0 rows affected (0.54 sec)
INSERT 명령을 사용해 테이블에 여러 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values('Chris','Hi');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('David','Hello');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Chris','Awesome');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Chris','Amazing');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('David','Nice Place');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Chris','Amazing');
Query OK, 1 row affected (0.12 sec)SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----------+-----------------+ | UserName | UserPostMessage | +----------+-----------------+ | Chris | Hi | | David | Hello | | Chris | Awesome | | Chris | Amazing | | David | Nice Place | | Chris | Amazing | +----------+-----------------+ 6 rows in set (0.00 sec)
사용자별 고유 메시지 수를 계산하는 쿼리
이제 MySQL 데이터베이스에서 열의 고유 레코드를 집계하는 실제 쿼리를 살펴보겠습니다.
mysql> select UserName,count(DISTINCT UserPostMessage) AS NumberOfMessagesPostByUser from DemoTable group by UserName;
실행 결과는 다음과 같습니다.
+----------+----------------------------+ | UserName | NumberOfMessagesPostByUser | +----------+----------------------------+ | Chris | 3 | | David | 2 | +----------+----------------------------+ 2 rows in set (0.00 sec)
쿼리 상세 설명
- COUNT(DISTINCT UserPostMessage): UserPostMessage 열에서 중복된 값을 제거한 뒤 개수를 계산합니다.
- GROUP BY UserName: 사용자 이름별로 데이터를 그룹화하여 각 사용자마다 고유 메시지 수를 개별적으로 집계합니다.
- AS NumberOfMessagesPostByUser: 결과 열에 별칭을 지정해 가독성을 높입니다.
결과를 해석해 보면, Chris는 'Amazing'이라는 동일한 메시지를 두 번 게시했기 때문에 전체 게시물은 4개지만 고유한 메시지는 3개로 집계됩니다. 반면 David는 서로 다른 메시지만 작성했으므로 2개로 계산됩니다. 이처럼 COUNT(DISTINCT)와 GROUP BY를 조합하면 중복 데이터를 손쉽게 걸러내고 그룹별 통계를 정확하게 얻을 수 있습니다.