Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 숫자 차이를 기준으로 레코드를 정렬하는 방법

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)

숫자 차이를 기준으로 정렬하는 쿼리

이제 Score1Score2의 차이를 기준으로 레코드를 정렬하는 쿼리입니다.

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 절 안에서 산술 연산이나 함수를 조합하면 다양한 기준으로 레코드를 유연하게 정렬할 수 있습니다.