MySQL에서 동일한 테이블 내 각 값이 몇 번 나타나는지(총 발생 횟수) 확인하려면 서브쿼리(subquery)를 활용하면 됩니다. 이번 글에서는 예제 테이블을 만들고, 하나의 쿼리 안에서 원본 데이터와 각 값의 발생 횟수를 함께 조회하는 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 다음과 같이 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Value int
-> );
Query OK, 0 rows affected (0.61 sec)
2. 데이터 삽입
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.36 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(40);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.20 sec)
3. 저장된 레코드 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
출력 결과
+-------+
| Value |
+-------+
| 20 |
| 30 |
| 20 |
| 40 |
| 30 |
| 20 |
+-------+
6 rows in set (0.00 sec)
4. 값의 총 발생 횟수를 조회하는 쿼리
다음은 각 값이 테이블 전체에서 몇 번 등장하는지 함께 출력하는 쿼리입니다. 외부 쿼리의 테이블 별칭(tbl)을 서브쿼리 내부에서 참조함으로써, 모든 행에 대해 해당 값의 COUNT(*)가 계산됩니다.
mysql> select tbl.Value,(SELECT COUNT(*) from DemoTable where Value = tbl.Value) AS Occurrence from DemoTable tbl;
출력 결과
+-------+------------+
| Value | Occurrence |
+-------+------------+
| 20 | 3 |
| 30 | 2 |
| 20 | 3 |
| 40 | 1 |
| 30 | 2 |
| 20 | 3 |
+-------+------------+
6 rows in set (0.00 sec)
실행 결과를 보면 값 20은 3번, 값 30은 2번, 값 40은 1번 나타난 것을 확인할 수 있습니다. 이처럼 상관 서브쿼리(correlated subquery)를 사용하면 GROUP BY 절 없이도 원본 행을 그대로 유지하면서 각 값의 발생 횟수를 한 번의 쿼리로 조회할 수 있습니다.