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

MySQL에서 열의 각 고유 값 개수를 구하는 방법 완벽 가이드

MySQL에서 특정 열에 포함된 각 고유(distinct) 값이 몇 번씩 나타나는지 확인해야 하는 경우가 자주 있습니다. 예를 들어, 회원 목록에서 같은 이름이 몇 명 있는지 집계하거나, 주문 데이터에서 상품별 주문 횟수를 파악할 때 유용합니다. 이 글에서는 GROUP BY 절과 COUNT() 함수를 활용해 각 고유 값의 개수를 구하는 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 실습에 사용할 테이블을 만들어야 합니다. 테이블 생성에는 CREATE TABLE 명령어를 사용합니다.

mysql> create table DistinctDemo1
   - > (
   - > id int,
   - > name varchar(100)
   - > );
Query OK, 0 rows affected (0.43 sec)

위 쿼리는 정수형 id 컬럼과 최대 100자까지 저장 가능한 문자열 name 컬럼으로 구성된 DistinctDemo1 테이블을 생성합니다.

2. 레코드 삽입하기

테이블이 준비되었으니 이제 샘플 데이터를 삽입해 보겠습니다. 의도적으로 'John'이라는 이름을 세 번 반복해서 넣어 중복 값을 만들었습니다.

mysql> insert into DistinctDemo1 values(1,'John');
Query OK, 1 row affected (0.34 sec)

mysql> insert into DistinctDemo1 values(2,'John');
Query OK, 1 row affected (0.20 sec)

mysql> insert into DistinctDemo1 values(3,'John');
Query OK, 1 row affected (0.09 sec)

mysql> insert into DistinctDemo1 values(4,'Carol');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DistinctDemo1 values(5,'David');
Query OK, 1 row affected (0.12 sec)

3. 전체 레코드 조회하기

SELECT 문으로 테이블에 저장된 모든 데이터를 확인합니다.

mysql> select *from DistinctDemo1;

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

+------+-------+
| id   | name  |
+------+-------+
|    1 | John  |
|    2 | John  |
|    3 | John  |
|    4 | Carol |
|    5 | David |
+------+-------+
5 rows in set (0.00 sec)

총 5개의 레코드가 있으며, 'John'은 3번, 'Carol'과 'David'는 각각 1번씩 등장한 것을 눈으로 확인할 수 있습니다.

4. GROUP BY와 COUNT로 고유 값 개수 세기

각 이름이 몇 번 등장했는지 집계하려면 GROUP BY 절로 이름별로 그룹화한 뒤, COUNT() 함수로 각 그룹의 행 수를 세면 됩니다. 사용 문법은 다음과 같습니다.

mysql> SELECT name,COUNT(1) as OccurenceValue FROM DistinctDemo1 GROUP BY name ORDER BY OccurenceValue;

실행 결과는 아래와 같습니다.

+-------+----------------+
| name  | OccurenceValue |
+-------+----------------+
| Carol |              1 |
| David |              1 |
| John  |              3 |
+-------+----------------+
3 rows in set (0.04 sec)

결과를 해석해 보면 다음과 같습니다.

  • name: 그룹화된 고유 값(이름)
  • OccurenceValue: 해당 이름이 나타난 횟수(COUNT 결과)

'John'은 3번, 'Carol'과 'David'는 각각 1번씩 등장했으며, ORDER BY OccurenceValue 덕분에 개수가 적은 순서대로 정렬되어 출력됩니다.

정리 및 추가 팁

핵심 패턴은 SELECT 컬럼명, COUNT(*) FROM 테이블명 GROUP BY 컬럼명입니다. 몇 가지 응용 방법도 알아두면 좋습니다.

  • COUNT(1), COUNT(*), COUNT(name) 모두 여기서는 동일한 결과를 반환하지만, COUNT(컬럼명)은 NULL 값을 제외하고 계산한다는 차이가 있습니다.
  • 개수가 많은 순서대로 보고 싶다면 ORDER BY OccurenceValue DESC처럼 내림차순으로 정렬하면 됩니다.
  • 특정 개수 이상인 그룹만 필터링하려면 HAVING COUNT(1) >= 2 조건을 추가할 수 있습니다.

이처럼 GROUP BY와 COUNT 함수만 활용하면 별도의 애플리케이션 로직 없이도 SQL 한 줄로 열의 고유 값 분포를 손쉽게 집계할 수 있습니다.