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

MySQL 쿼리 하나로 특정 레코드(중복)의 발생 횟수 계산하기

테이블에 저장된 특정 레코드가 몇 번 반복되어 나타나는지 확인하고 싶다면, 집계 함수 COUNT()GROUP BY 절을 함께 사용하면 됩니다. GROUP BY로 대상 컬럼의 값을 그룹으로 묶은 뒤, 각 그룹에 속한 레코드 수를 COUNT()로 세는 방식입니다.

1. 예제 테이블 생성

먼저 실습에 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable
(
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentSubject varchar(40)
);
Query OK, 0 rows affected (5.03 sec)

2. 샘플 데이터 삽입

INSERT 문을 사용해 과목명이 중복되는 데이터를 몇 개 넣어 보겠습니다.

mysql> insert into DemoTable(StudentSubject) values('MySQL');
Query OK, 1 row affected (0.78 sec)
mysql> insert into DemoTable(StudentSubject) values('Java');
Query OK, 1 row affected (0.39 sec)
mysql> insert into DemoTable(StudentSubject) values('MySQL');
Query OK, 1 row affected (1.12 sec)
mysql> insert into DemoTable(StudentSubject) values('MongoDB');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable(StudentSubject) values('Java');
Query OK, 1 row affected (0.45 sec)

3. 전체 데이터 조회

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

mysql> select *from DemoTable;

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

+-----------+----------------+
| StudentId | StudentSubject |
+-----------+----------------+
|         1 | MySQL          |
|         2 | Java           |
|         3 | MySQL          |
|         4 | MongoDB        |
|         5 | Java           |
+-----------+----------------+
5 rows in set (0.00 sec)

4. 중복 발생 횟수 계산 쿼리

아래 쿼리 하나만으로 각 과목별 레코드가 몇 번 등장했는지 한꺼번에 집계할 수 있습니다.

mysql> select StudentSubject,count(StudentId) from DemoTable group by StudentSubject;

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

+----------------+------------------+
| StudentSubject | count(StudentId) |
+----------------+------------------+
| MySQL          |                2 |
| Java           |                2 |
| MongoDB        |                1 |
+----------------+------------------+
3 rows in set (0.00 sec)

결과 해석

출력 결과를 보면 MySQL은 2번, Java는 2번, MongoDB는 1번 등장했습니다. 즉, GROUP BY가 StudentSubject 값을 기준으로 레코드를 묶고, COUNT(StudentId)가 각 그룹의 행 개수를 반환한 것입니다.

응용 팁

집계 결과를 많이 나온 순서대로 정렬하고 싶다면 ORDER BY와 별칭(Alias)을 활용하면 더 읽기 좋은 결과를 얻을 수 있습니다.

mysql> select StudentSubject, count(StudentId) AS cnt
    -> from DemoTable
    -> group by StudentSubject
    -> order by cnt desc;

이처럼 COUNT()와 GROUP BY 조합은 로그 분석, 카테고리별 통계, 중복 데이터 점검 등 실무에서 가장 자주 쓰이는 패턴 중 하나이므로 꼭 익혀두는 것이 좋습니다.