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

MySQL에서 특정 값을 맨 위로 정렬하는 방법 – ORDER BY 절 활용하기

MySQL에서 특정 조건에 해당하는 레코드를 결과 목록의 맨 위로 정렬하고 싶다면 ORDER BY 절을 활용하면 됩니다. 핵심은 비교 연산식을 정렬 기준으로 사용하는 것인데, 이를 통해 원하는 값이 포함된 행들을 우선적으로 배치할 수 있습니다.

기본 문법

특정 값을 맨 위로 정렬하는 기본 문법은 다음과 같습니다.

SELECT * FROM yourTableName 
ORDER BY yourColumnName='yourValue' DESC, yourIdColumnName;

여기서 yourColumnName='yourValue'는 해당 열의 값이 지정한 값과 일치하면 1(true), 일치하지 않으면 0(false)을 반환합니다. 이를 DESC(내림차순)으로 정렬하면 값이 일치하는 행(1)이 먼저 출력되고, 그 다음 두 번째 정렬 기준인 ID 열 순서대로 나머지 행들이 정렬됩니다.

예제 테이블 생성

문법을 실제로 이해하기 위해 예제 테이블을 만들어 보겠습니다.

mysql> create table SortCertainValues
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> Name varchar(20),
    -> CountryName varchar(10),
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (1.36 sec)

샘플 데이터 삽입

INSERT 명령어를 사용해 몇 개의 레코드를 삽입합니다.

mysql> insert into SortCertainValues(Name,CountryName) values('Adam','US');
Query OK, 1 row affected (0.35 sec)
mysql> insert into SortCertainValues(Name,CountryName) values('John','UK');
Query OK, 1 row affected (0.74 sec)
mysql> insert into SortCertainValues(Name,CountryName) values('Bob','US');
Query OK, 1 row affected (0.20 sec)
mysql> insert into SortCertainValues(Name,CountryName) values('Carol','Denmark');
Query OK, 1 row affected (0.32 sec)
mysql> insert into SortCertainValues(Name,CountryName) values('Sam','US');
Query OK, 1 row affected (0.19 sec)
mysql> insert into SortCertainValues(Name,CountryName) values('David','France');
Query OK, 1 row affected (0.13 sec)
mysql> insert into SortCertainValues(Name,CountryName) values('Maxwell','AUS');
Query OK, 1 row affected (0.25 sec)
mysql> insert into SortCertainValues(Name,CountryName) values('Kevin','NewZealand');
Query OK, 1 row affected (0.29 sec)

전체 레코드 조회

SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.

mysql> select *from SortCertainValues;

실행 결과는 다음과 같습니다.

+----+---------+-------------+
| Id | Name    | CountryName |
+----+---------+-------------+
|  1 | Adam    | US          |
|  2 | John    | UK          |
|  3 | Bob     | US          |
|  4 | Carol   | Denmark     |
|  5 | Sam     | US          |
|  6 | David   | France      |
|  7 | Maxwell | AUS         |
|  9 | Kevin   | NewZealand  |
+----+---------+-------------+
8 rows in set (0.00 sec)

특정 값(CountryName = 'US')을 맨 위로 정렬

이제 CountryName이 'US'인 모든 레코드를 결과 목록의 맨 위로 정렬하는 쿼리를 실행해 보겠습니다.

mysql> select *from SortCertainValues order by CountryName='US' DESC,Id;

실행 결과는 다음과 같습니다.

+----+---------+-------------+
| Id | Name    | CountryName |
+----+---------+-------------+
|  1 | Adam    | US          |
|  3 | Bob     | US          |
|  5 | Sam     | US          |
|  2 | John    | UK          |
|  4 | Carol   | Denmark     |
|  6 | David   | France      |
|  7 | Maxwell | AUS         |
|  9 | Kevin   | NewZealand  |
+----+---------+-------------+
8 rows in set (0.00 sec)

결과 분석

위 결과를 보면 CountryName이 'US'인 레코드(Adam, Bob, Sam)가 맨 위로 올라온 것을 확인할 수 있습니다. 그 뒤에는 나머지 레코드들이 Id 오름차순으로 정렬되어 있습니다.

이처럼 ORDER BY 컬럼명='값' DESC 패턴을 사용하면 별도의 CASE 문 없이도 간단하게 특정 값을 우선순위로 정렬할 수 있습니다. 여러 개의 값을 우선순위로 지정하고 싶다면 FIELD() 함수나 CASE WHEN 구문을 함께 활용하는 것도 좋은 방법입니다.