개요
기존 테이블의 열을 기준으로 GROUP BY를 적용한 결과를 새로운 테이블로 만들고 싶다면, MySQL의 CREATE TABLE AS SELECT 구문을 활용하면 됩니다. 이 구문은 SELECT 쿼리의 실행 결과를 그대로 새 테이블에 저장해 주기 때문에, 중복 제거나 데이터 정리 작업을 매우 간편하게 처리할 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> CountryName varchar(20)
-> );
Query OK, 0 rows affected (0.68 sec)
insert 명령을 사용해 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable1(CountryName) values('US');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1(CountryName) values('UK');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable1(CountryName) values('AUS');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1(CountryName) values('UK');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1(CountryName) values('UK');
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable1(CountryName) values('US');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1(CountryName) values('AUS');
Query OK, 1 row affected (0.10 sec)select 문으로 테이블의 전체 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable1;
출력 결과
+----+-------------+
| Id | CountryName |
+----+-------------+
| 1 | US |
| 2 | UK |
| 3 | AUS |
| 4 | UK |
| 5 | UK |
| 6 | US |
| 7 | AUS |
+----+-------------+
7 rows in set (0.00 sec)
위 결과에서 볼 수 있듯이 'US', 'UK', 'AUS' 값이 여러 번 중복되어 저장되어 있습니다. 이제 CountryName 열을 기준으로 GROUP BY 처리한 결과를 새 테이블(DemoTable2)로 생성하는 쿼리를 살펴보겠습니다.
mysql> create table DemoTable2 AS select *from DemoTable1 group by CountryName;
Query OK, 3 rows affected (0.79 sec)
Records: 3 Duplicates: 0 Warnings: 0
새로 생성된 테이블의 레코드를 확인합니다.
mysql> select *from DemoTable2;
출력 결과
+----+-------------+
| Id | CountryName |
+----+-------------+
| 1 | US |
| 2 | UK |
| 3 | AUS |
+----+-------------+
3 rows in set (0.00 sec)
실행 결과를 보면 중복이 제거되어 각 국가명이 한 번씩만 저장된 것을 확인할 수 있습니다. 이처럼 CREATE TABLE ... AS SELECT와 GROUP BY를 함께 사용하면 기존 테이블의 데이터를 특정 열 기준으로 그룹화하여, 중복 없는 깔끔한 새 테이블로 손쉽게 추출할 수 있습니다.