MySQL에서 두 개의 숫자 컬럼 값의 차이를 기준으로 레코드를 정렬하려면 ORDER BY 절에 두 컬럼의 뺄셈 결과를 지정하면 됩니다. 이렇게 하면 계산된 차이값이 작은 순서대로(오름차순) 레코드가 표시됩니다.
기본 문법
SELECT * FROM yourTableName ORDER BY (yourIntegerColumnName1 - yourIntegerColumnName2);
예제 테이블 생성
먼저 예제로 사용할 테이블을 생성해 보겠습니다.
mysql> CREATE TABLE DemoTable1313 -> ( -> Name VARCHAR(20), -> Score1 INT, -> Score2 INT -> ); Query OK, 0 rows affected (3.48 sec)
데이터 삽입
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> INSERT INTO DemoTable1313 VALUES('Chris',40,60);
Query OK, 1 row affected (0.38 sec)
mysql> INSERT INTO DemoTable1313 VALUES('David',70,50);
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable1313 VALUES('Adam',35,30);
Query OK, 1 row affected (0.18 sec)전체 레코드 조회
SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> SELECT * FROM DemoTable1313;
실행 결과는 다음과 같습니다.
+-------+--------+--------+ | Name | Score1 | Score2 | +-------+--------+--------+ | Chris | 40 | 60 | | David | 70 | 50 | | Adam | 35 | 30 | +-------+--------+--------+ 3 rows in set (0.00 sec)
숫자 차이를 기준으로 정렬하는 쿼리
이제 Score1과 Score2의 차이를 기준으로 레코드를 정렬하는 쿼리입니다.
mysql> SELECT * FROM DemoTable1313 -> ORDER BY (Score1 - Score2);
실행 결과는 다음과 같습니다.
+-------+--------+--------+ | Name | Score1 | Score2 | +-------+--------+--------+ | Chris | 40 | 60 | | Adam | 35 | 30 | | David | 70 | 50 | +-------+--------+--------+ 3 rows in set (0.00 sec)
결과 분석
각 레코드의 차이값은 다음과 같습니다.
- Chris: 40 − 60 = -20
- Adam: 35 − 30 = 5
- David: 70 − 50 = 20
ORDER BY의 기본 정렬 방향은 오름차순(ASC)이므로, 차이값이 가장 작은 Chris(-20)부터 Adam(5), David(20) 순으로 출력됩니다.
내림차순으로 정렬하기
차이가 큰 순서대로 정렬하고 싶다면 DESC 키워드를 추가하면 됩니다.
mysql> SELECT * FROM DemoTable1313 -> ORDER BY (Score1 - Score2) DESC;
절대값 차이로 정렬하기
부호와 상관없이 차이의 크기만 기준으로 정렬하려면 ABS() 함수를 활용할 수 있습니다.
mysql> SELECT * FROM DemoTable1313 -> ORDER BY ABS(Score1 - Score2);
이처럼 ORDER BY 절 안에서 산술 연산이나 함수를 조합하면 다양한 기준으로 레코드를 유연하게 정렬할 수 있습니다.