MySQL에서 중복을 제거한 고유한(distinct) 값과 각 값이 나타난 개수(count)를 함께 조회하려면 GROUP BY 절과 COUNT() 함수를 함께 사용하면 됩니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable754 (ProductPrice int); Query OK, 0 rows affected (0.48 sec)
2. 데이터 삽입하기
INSERT 명령어를 사용해 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable754 values(200); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable754 values(500); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable754 values(200); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable754 values(500); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable754 values(800); Query OK, 1 row affected (0.24 sec) mysql> insert into DemoTable754 values(900); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable754 values(200); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable754 values(200); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable754 values(900); Query OK, 1 row affected (0.11 sec)
3. 전체 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable754;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------------+ | ProductPrice | +--------------+ | 200 | | 500 | | 200 | | 500 | | 800 | | 900 | | 200 | | 200 | | 900 | +--------------+ 9 rows in set (0.00 sec)
4. 고유한 값과 개수 조회하기
고유한 값과 그 개수를 반환하는 쿼리는 다음과 같습니다. ProductPrice 열을 기준으로 그룹화한 뒤, COUNT() 함수로 각 그룹의 레코드 수를 집계합니다.
mysql> select ProductPrice,count(ProductPrice) from DemoTable754 group by ProductPrice;
실행 결과는 아래와 같습니다.
+--------------+---------------------+ | ProductPrice | count(ProductPrice) | +--------------+---------------------+ | 200 | 4 | | 500 | 2 | | 800 | 1 | | 900 | 2 | +--------------+---------------------+ 4 rows in set (0.00 sec)
결과 해석
출력 결과를 보면 전체 9개의 레코드가 4개의 고유한 가격 값으로 그룹화되었음을 알 수 있습니다.
- 200: 4번 등록됨
- 500: 2번 등록됨
- 800: 1번 등록됨
- 900: 2번 등록됨
참고로 결과의 가독성을 높이기 위해 별칭(alias)을 사용할 수도 있습니다.
mysql> select ProductPrice, count(ProductPrice) AS TotalCount
-> from DemoTable754
-> group by ProductPrice;이처럼 GROUP BY와 COUNT()를 조합하면 MySQL에서 손쉽게 고유한 값별 빈도수를 집계할 수 있습니다.