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

MySQL에서 고유한 값의 개수를 계산하는 방법

MySQL에서 특정 컬럼의 고유한(distinct) 값이 몇 개인지 계산해야 하는 경우가 자주 있습니다. 예를 들어, 각 사용자별로 서로 다른 코드가 몇 개 존재하는지 집계하는 상황을 생각해 볼 수 있습니다. 이때 COUNT(DISTINCT) 함수와 GROUP BY 절을 함께 사용하면 손쉽게 해결할 수 있습니다.

1. 테이블 생성하기

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

mysql> create table DemoTable
    -> (
    -> Name varchar(100),
    -> Code varchar(100)
    -> );
Query OK, 0 rows affected (0.54 sec)

2. 샘플 데이터 삽입하기

INSERT 명령어를 사용하여 테이블에 레코드를 추가합니다. 의도적으로 중복된 데이터도 함께 넣어 고유 값 집계 결과를 확인해 보겠습니다.

mysql> insert into DemoTable values('Chris','0001');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable values('Robert','0002');
Query OK, 1 row affected (0.20 sec)

mysql> insert into DemoTable values('Robert','0003');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values('Chris','0001');
Query OK, 1 row affected (0.12 sec)

3. 전체 데이터 조회하기

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable;

출력 결과

+--------+------+
| Name   | Code |
+--------+------+
| Chris  | 0001 |
| Robert | 0002 |
| Robert | 0003 |
| Chris  | 0001 |
+--------+------+
4 rows in set (0.00 sec)

위 결과를 보면 총 4개의 행이 있으며, Chris는 '0001' 코드가 두 번 중복되어 있고 Robert는 '0002'와 '0003'이라는 서로 다른 두 개의 코드를 가지고 있습니다.

4. 고유한 값의 개수 계산하기

다음은 이름(Name)별로 고유한 코드(Code)의 개수를 집계하는 쿼리입니다. COUNT(DISTINCT Code)는 중복을 제거한 후 개수를 세고, GROUP BY Name은 이름 기준으로 그룹화합니다.

mysql> select Name,count(distinct Code) from DemoTable group by Name;

출력 결과

+--------+----------------------+
| Name   | count(distinct Code) |
+--------+----------------------+
| Chris  |                    1 |
| Robert |                    2 |
+--------+----------------------+
2 rows in set (0.06 sec)

결과 분석

실행 결과를 해석하면 다음과 같습니다.

  • Chris: '0001' 코드만 사용했으므로 고유한 코드 개수는 1개입니다. 동일한 코드가 두 번 삽입되었지만 DISTINCT 처리로 중복이 제거되었습니다.
  • Robert: '0002'와 '0003'이라는 서로 다른 두 개의 코드를 사용했으므로 고유한 코드 개수는 2개입니다.

정리

MySQL에서 고유한 값의 개수를 구할 때는 COUNT(DISTINCT 컬럼명) 구문을 사용하며, 특정 기준별로 나누어 집계하고 싶다면 GROUP BY 절을 함께 활용하면 됩니다. 이 조합은 사용자별 활동 통계, 카테고리별 상품 종류 집계 등 다양한 실무 시나리오에서 유용하게 활용됩니다.