MySQL에서 특정 열에 같은 값이 몇 번 나타나는지 확인하려면 집계 함수 COUNT()와 GROUP BY 절을 함께 사용하면 됩니다. GROUP BY는 동일한 값을 가진 행들을 하나의 그룹으로 묶어주고, COUNT(*)는 각 그룹에 속한 행의 개수를 반환합니다.
기본 문법
SELECT yourColumnName, COUNT(*) AS anyVariableName FROM yourTableName GROUP BY yourColumnName;
예제 테이블 생성
위 구문을 실제로 이해하기 위해 예제 테이블을 먼저 만들어 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> CREATE TABLE CountSameValue -> ( -> Id int, -> Name varchar(100), -> Marks int -> ); Query OK, 0 rows affected (0.70 sec)
데이터 삽입
INSERT 명령을 사용하여 테이블에 레코드를 삽입합니다. 쿼리는 다음과 같습니다.
mysql> INSERT INTO CountSameValue VALUES(1,'Sam',67); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO CountSameValue VALUES(2,'Mike',87); Query OK, 1 row affected (0.19 sec) mysql> INSERT INTO CountSameValue VALUES(3,'Carol',67); Query OK, 1 row affected (0.24 sec) mysql> INSERT INTO CountSameValue VALUES(4,'Bob',87); Query OK, 1 row affected (0.18 sec) mysql> INSERT INTO CountSameValue VALUES(5,'John',71); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO CountSameValue VALUES(6,'Adam',66); Query OK, 1 row affected (0.18 sec) mysql> INSERT INTO CountSameValue VALUES(7,'David',71); Query OK, 1 row affected (0.20 sec) mysql> INSERT INTO CountSameValue VALUES(8,'Maria',67); Query OK, 1 row affected (0.16 sec)
저장된 데이터 확인
SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> SELECT * FROM CountSameValue;
실행 결과는 다음과 같습니다.
+------+-------+-------+ | Id | Name | Marks | +------+-------+-------+ | 1 | Sam | 67 | | 2 | Mike | 87 | | 3 | Carol | 67 | | 4 | Bob | 87 | | 5 | John | 71 | | 6 | Adam | 66 | | 7 | David | 71 | | 8 | Maria | 67 | +------+-------+-------+ 8 rows in set (0.00 sec)
값별 출현 횟수 카운트하기
이제 특정 값(Marks 점수)이 열에 몇 번 나타나는지 세는 쿼리입니다. COUNT(*)에 별칭(Alias)을 지정하면 결과를 더 읽기 쉽게 확인할 수 있습니다.
mysql> SELECT Marks, COUNT(*) AS Total FROM CountSameValue GROUP BY Marks;
실행 결과는 다음과 같습니다.
+-------+-------+ | Marks | Total | +-------+-------+ | 67 | 3 | | 87 | 2 | | 71 | 2 | | 66 | 1 | +-------+-------+ 4 rows in set (0.00 sec)
결과 해석
위 출력 결과를 보면 다음과 같은 정보를 알 수 있습니다.
- 67점: 3명(Sam, Carol, Maria)이 받았습니다.
- 87점: 2명(Mike, Bob)이 받았습니다.
- 71점: 2명(John, David)이 받았습니다.
- 66점: 1명(Adam)만 받았습니다.
이처럼 GROUP BY와 COUNT(*)를 조합하면 별도의 복잡한 로직 없이 간단한 쿼리 한 번으로 특정 열 내 값의 빈도수를 손쉽게 집계할 수 있습니다. 데이터 분석이나 통계 조회 시 매우 유용하게 활용되는 기본 패턴이니 꼭 기억해 두시기 바랍니다.