MySQL에서 ORDER BY 절에 그룹 함수(집계 함수)를 사용하면 GROUP BY로 묶인 결과 집합의 각 그룹을 원하는 기준으로 정렬할 수 있습니다. 기본 정렬 순서는 오름차순(ASC)이며, DESC 키워드를 사용하면 내림차순으로 정렬 순서를 반대로 바꿀 수 있습니다.
ORDER BY 절에서 그룹 함수 사용 예제
다음은 직원(employees) 테이블에서 직급(designation)과 입사 연도(YEAR(Doj))별로 그룹화한 뒤, COUNT(*) 값을 기준으로 내림차순 정렬하는 예제입니다.
mysql> Select designation, YEAR(Doj), count(*) from employees GROUP BY designation, YEAR(DoJ) ORDER BY Count(*) DESC; +-------------+-----------+----------+ | designation | YEAR(Doj) | count(*) | +-------------+-----------+----------+ | Prof | 2009 | 2 | | Asst.Prof | 2015 | 1 | | Asst.Prof | 2016 | 1 | | Prof | 2010 | 1 | | Asso.Prof | 2013 | 1 | +-------------+-----------+----------+ 5 rows in set (0.00 sec)
위 결과에서 볼 수 있듯이, ORDER BY Count(*) DESC를 사용하면 해당 그룹에 속한 행의 개수가 많은 순서대로 데이터가 정렬됩니다.
일반 열 기준으로 정렬하기
그룹 함수뿐만 아니라 SELECT 절에 있는 일반 열을 기준으로도 정렬할 수 있습니다. 아래 예제는 직급(designation)을 기준으로 내림차순 정렬한 결과입니다.
mysql> Select designation, YEAR(Doj), count(*) from employees GROUP BY designation, YEAR(DoJ) ORDER BY designation DESC; +-------------+-----------+----------+ | designation | YEAR(Doj) | count(*) | +-------------+-----------+----------+ | Prof | 2009 | 2 | | Prof | 2010 | 1 | | Asst.Prof | 2015 | 1 | | Asst.Prof | 2016 | 1 | | Asso.Prof | 2013 | 1 | +-------------+-----------+----------+ 5 rows in set (0.00 sec)
정리
- ORDER BY 절에는 COUNT(), SUM(), AVG() 같은 그룹 함수를 그대로 사용할 수 있습니다.
- 기본 정렬 방향은 오름차순(ASC)이며, DESC 키워드를 붙이면 내림차순으로 정렬됩니다.
- 그룹 함수 외에도 SELECT 절에 포함된 일반 열 이름을 기준으로 정렬할 수 있습니다.