개요
MySQL에서는 ORDER BY 절에 단순히 열 이름만 쓰는 것이 아니라, 여러 열을 조합한 계산식(함수)의 결과를 기준으로도 정렬할 수 있습니다. 예를 들어 두 개의 숫자 열이 있을 때, 각 열에 가중치를 곱해 더한 값 순서대로 데이터를 내림차순 정렬하는 방법을 예제와 함께 살펴보겠습니다.
1. 예제 테이블 생성
먼저 두 개의 숫자 열을 가진 테이블을 생성합니다.
mysql> create table orderByAFunctionDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> FirstNumber int,
-> SecondNumber int
-> );
Query OK, 0 rows affected (0.44 sec)
2. 샘플 데이터 입력
INSERT 명령으로 몇 개의 레코드를 추가합니다.
mysql> insert into orderByAFunctionDemo(FirstNumber,SecondNumber) values(10,4);
Query OK, 1 row affected (0.11 sec)
mysql> insert into orderByAFunctionDemo(FirstNumber,SecondNumber) values(45,78);
Query OK, 1 row affected (0.17 sec)
mysql> insert into orderByAFunctionDemo(FirstNumber,SecondNumber) values(23,10);
Query OK, 1 row affected (0.12 sec)
mysql> insert into orderByAFunctionDemo(FirstNumber,SecondNumber) values(67,237);
Query OK, 1 row affected (0.16 sec)
mysql> insert into orderByAFunctionDemo(FirstNumber,SecondNumber) values(12,90);
Query OK, 1 row affected (0.13 sec)
3. 전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from orderByAFunctionDemo;
실행 결과는 다음과 같습니다.
+----+-------------+--------------+
| Id | FirstNumber | SecondNumber |
+----+-------------+--------------+
| 1 | 10 | 4 |
| 2 | 45 | 78 |
| 3 | 23 | 10 |
| 4 | 67 | 237 |
| 5 | 12 | 90 |
+----+-------------+--------------+
5 rows in set (0.00 sec)
4. 두 열의 연산 결과를 기준으로 정렬
이제 핵심 부분입니다. 아래 쿼리는 (4 × FirstNumber + 5 × SecondNumber)라는 계산식의 결과를 별칭 Calculation으로 지정하고, 이 값을 기준으로 내림차순(DESC) 정렬합니다.
mysql> select (4*FirstNumber+5*SecondNumber) as Calculation
-> from orderByAFunctionDemo
-> order by Calculation desc;
실행 결과는 다음과 같습니다.
+-------------+
| Calculation |
+-------------+
| 1453 |
| 570 |
| 498 |
| 142 |
| 60 |
+-------------+
5 rows in set (0.00 sec)
동작 원리 및 참고 사항
- 별칭(Alias) 활용:
SELECT절에서AS로 정의한 별칭은ORDER BY절에서 그대로 사용할 수 있습니다. 이렇게 하면 긴 계산식을 반복해서 쓰지 않아도 되어 쿼리가 깔끔해집니다. - 정렬 방향 지정:
DESC는 내림차순,ASC는 오름차순입니다. 생략하면 기본값인 오름차순으로 정렬됩니다. - 다른 열 함께 조회: 필요하다면
SELECT Id, FirstNumber, SecondNumber, (4*FirstNumber+5*SecondNumber) AS Calculation ...처럼 원래 열과 계산 결과를 함께 출력할 수도 있습니다. - 활용 예시: 이 기법은 가중치가 적용된 점수 계산, 매출 × 단가 기준 랭킹, 거리 계산 결과 정렬 등 실무에서 다양하게 응용할 수 있습니다.
마무리
MySQL의 ORDER BY 절은 열 이름뿐 아니라 계산식과 별칭도 받을 수 있기 때문에, 두 개 이상의 열을 조합한 조건으로 손쉽게 정렬할 수 있습니다. 위 예제처럼 가중치를 곱한 합계를 기준으로 정렬하면, 단순 열 정렬로는 얻을 수 없는 유연한 데이터 분석이 가능합니다.