데이터베이스 작업을 하다 보면 여러 회사의 직원 정보가 섞여 있는 테이블에서, 특정 회사에 소속된 직원 이름만 중복 없이 추출해야 하는 경우가 자주 있습니다. 이럴 때 MySQL의 GROUP BY 절과 WHERE 조건을 함께 사용하면 간단하게 해결할 수 있습니다.
이 글에서는 예제 테이블을 만들고 데이터를 삽입한 뒤, GROUP BY를 활용해 특정 회사(예: Google)의 직원 이름을 조회하는 방법을 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 직원 정보를 저장할 테이블을 생성합니다.
mysql> create table DemoTable642( EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY, EmployeeName varchar(100), EmployeeCompanyName varchar(100) ); Query OK, 0 rows affected (0.81 sec)
위 테이블은 세 개의 컬럼으로 구성됩니다.
- EmployeeId: 자동 증가되는 기본 키
- EmployeeName: 직원 이름
- EmployeeCompanyName: 직원이 소속된 회사명
2단계: 샘플 데이터 삽입
INSERT 문을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable642(EmployeeName, EmployeeCompanyName) values('John', 'Google');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable642(EmployeeName, EmployeeCompanyName) values('Carol', 'Microsoft');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable642(EmployeeName, EmployeeCompanyName) values('John', 'Amazon');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable642(EmployeeName, EmployeeCompanyName) values('Carol', 'Google');
Query OK, 1 row affected (0.37 sec)
mysql> insert into DemoTable642(EmployeeName, EmployeeCompanyName) values('John', 'Flipkart');
Query OK, 1 row affected (0.14 sec)3단계: 전체 레코드 확인
SELECT 문으로 테이블에 저장된 모든 데이터를 확인합니다.
mysql> select *from DemoTable642;
실행 결과는 다음과 같습니다.
+------------+--------------+---------------------+ | EmployeeId | EmployeeName | EmployeeCompanyName | +------------+--------------+---------------------+ | 1 | John | Google | | 2 | Carol | Microsoft | | 3 | John | Amazon | | 4 | Carol | Google | | 5 | John | Flipkart | +------------+--------------+---------------------+ 5 rows in set (0.00 sec)
4단계: GROUP BY로 특정 회사의 직원 이름 조회
이제 핵심 쿼리입니다. WHERE 절로 회사명이 'Google'인 행만 필터링한 후, GROUP BY로 직원 이름을 그룹화하여 중복 없는 결과를 얻습니다.
mysql> select EmployeeName from DemoTable642 where EmployeeCompanyName = 'Google' group by EmployeeName;
실행 결과는 다음과 같습니다.
+--------------+ | EmployeeName | +--------------+ | John | | Carol | +--------------+ 2 rows in set (0.00 sec)
결과 해석 및 참고 사항
샘플 데이터에서 Google에 소속된 직원은 John(1번)과 Carol(4번) 두 명입니다. GROUP BY를 사용했기 때문에 동일한 이름이 여러 번 등록되어 있어도 한 번씩만 출력됩니다.
참고로, 단순히 고유한 값을 구하는 것이 목적이라면 DISTINCT 키워드를 사용하는 것도 좋은 대안입니다.
select distinct EmployeeName from DemoTable642 where EmployeeCompanyName = 'Google';
DISTINCT와 GROUP BY는 이런 단순 조회에서는 동일한 결과를 반환하지만, COUNT나 SUM 같은 집계 함수를 함께 사용해야 한다면 GROUP BY가 더 적합합니다. 상황에 맞게 선택하여 사용하시기 바랍니다.