MySQL에서 하나의 쿼리로 두 개의 열을 기준으로 결과를 정렬해야 하는 경우가 자주 있습니다. 예를 들어 학생 목록을 학번과 나이를 동시에 기준으로 오름차순 또는 내림차순으로 정렬하고 싶다면, ORDER BY 절에 여러 열을 쉼표(,)로 구분하여 지정하면 됩니다.
기본 문법
두 개의 열을 기준으로 정렬할 때 사용하는 기본 문법은 다음과 같습니다.
ORDER BY yourColumnName1 DESC, yourColumnName2 DESC;
각 열 뒤에 ASC(오름차순) 또는 DESC(내림차순)를 붙여 정렬 방향을 개별적으로 지정할 수 있습니다.
예제 테이블 생성하기
먼저 실습에 사용할 테이블을 만들어 보겠습니다.
mysql> create table OrderByDemo -> ( -> StudentId int, -> StudentName varchar(100), -> StudentAge int -> ); Query OK, 0 rows affected (0.57 sec)
데이터 삽입하기
INSERT 명령을 사용해 테이블에 샘플 데이터를 입력합니다.
mysql> insert into OrderByDemo values(1,'John',23); Query OK, 1 row affected (0.20 sec) mysql> insert into OrderByDemo values(3,'Johnson',24); Query OK, 1 row affected (0.27 sec) mysql> insert into OrderByDemo values(4,'Carol',26); Query OK, 1 row affected (0.14 sec) mysql> insert into OrderByDemo values(2,'David',20); Query OK, 1 row affected (0.13 sec)
두 개의 열을 오름차순(ASC)으로 정렬하기
이제 앞서 소개한 문법을 적용해 두 개의 열을 기준으로 정렬해 보겠습니다. 아래 쿼리는 StudentId와 StudentAge를 모두 오름차순으로 정렬합니다.
mysql> select *from OrderByDemo order by StudentId ASC, StudentAge ASC;
실행 결과는 다음과 같습니다. 두 열이 모두 오름차순으로 정렬된 것을 확인할 수 있습니다.
+-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | John | 23 | | 2 | David | 20 | | 3 | Johnson | 24 | | 4 | Carol | 26 | +-----------+-------------+------------+ 4 rows in set (0.00 sec)
두 개의 열을 내림차순(DESC)으로 정렬하기
반대로 DESC 명령을 사용하면 내림차순으로 정렬할 수 있습니다.
mysql> select *from OrderByDemo order by StudentId DESC,StudentAge DESC;
실행 결과는 다음과 같습니다.
+-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 4 | Carol | 26 | | 3 | Johnson | 24 | | 2 | David | 20 | | 1 | John | 23 | +-----------+-------------+------------+ 4 rows in set (0.00 sec)
정렬 우선순위 유의 사항
참고: ORDER BY 절에 여러 열을 지정하면 먼저 작성된 첫 번째 열의 정렬이 최우선으로 적용됩니다. 즉, 첫 번째 열의 값이 같은 행들에 한해서만 두 번째 열의 정렬 기준이 적용됩니다. 따라서 업무 요구사항에 맞게 열의 순서와 각 열의 정렬 방향(ASC/DESC)을 신중하게 지정하는 것이 중요합니다.