MySQL에서 SELECT 문에 GROUP BY 절을 사용하면 결과 집합을 그룹으로 나눌 수 있습니다. GROUP BY 절 뒤에 특정 열을 지정하면 해당 열이 그룹화 기준이 되며, 같은 값을 가진 행들이 하나의 그룹으로 묶입니다. 이를 통해 MySQL SELECT 문이 반환하는 결과 집합을 여러 개의 그룹으로 분할할 수 있습니다.
예제
다음 예제를 통해 GROUP BY의 동작 방식을 쉽게 이해할 수 있습니다.
먼저 아래와 같은 'employees' 테이블이 있다고 가정해 보겠습니다.
mysql> Select * from employees; +------+-------------+--------+------------+ | id | designation | Salary | DoJ | +------+-------------+--------+------------+ | 100 | Asst.Prof | 50000 | 2016-06-15 | | 300 | Prof | 85000 | 2010-05-18 | | 250 | Asso.Prof | 74000 | 2013-02-12 | | 400 | Prof | 90000 | 2009-05-19 | | 200 | Asst.Prof | 60000 | 2015-05-11 | +------+-------------+--------+------------+ 5 rows in set (0.00 sec)
이제 다음 쿼리를 사용하여 직급(designation)별로 결과를 그룹화해 보겠습니다.
mysql> select designation, count(*), AVG(salary) from employees group by designation; +-------------+----------+-------------+ | designation | count(*) | AVG(salary) | +-------------+----------+-------------+ | Asso.Prof | 1 | 74000.0000 | | Asst.Prof | 2 | 55000.0000 | | Prof | 2 | 87500.0000 | +-------------+----------+-------------+ 3 rows in set (0.00 sec)
위 쿼리는 직급을 기준으로 결과 집합을 세 개의 그룹으로 나누어 반환합니다. 각 그룹의 의미는 다음과 같습니다.
- Asso.Prof(부교수): 총 1명, 평균 급여 74,000
- Asst.Prof(조교수): 총 2명, 평균 급여 55,000
- Prof(교수): 총 2명, 평균 급여 87,500
이처럼 GROUP BY 절은 COUNT, AVG, SUM 같은 집계 함수와 함께 사용하면 데이터를 카테고리별로 요약하고 분석하는 데 매우 유용합니다.