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

MySQL에서 특정 값 하나를 제외하고 내림차순(DESC)으로 정렬하는 방법

MySQL에서 데이터를 내림차순으로 정렬하려면 ORDER BY 절과 DESC 키워드를 사용합니다. 그런데 만약 특정 값 하나만 제외한 나머지 모든 값을 정렬하고 싶다면 어떻게 해야 할까요? 이 경우 비교 연산자(<>, 같지 않음)를 활용하면 간단하게 해결할 수 있습니다.

이 글에서는 'Adam'이라는 이름 하나만 맨 뒤로 보내고, 나머지 이름들은 알파벳 순으로 정렬하는 방법을 단계별로 알아보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
    -> (
    -> Name varchar(100)
    -> );
Query OK, 0 rows affected (0.89 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 테이블에 여러 개의 레코드를 추가합니다.

mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable values('Carol');
Query OK, 1 row affected (0.18 sec)

mysql> insert into DemoTable values('Adam');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.12 sec)

3. 전체 레코드 조회하기

SELECT 문을 사용해 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable;

출력 결과

+-------+
| Name  |
+-------+
| Sam   |
| Chris |
| John  |
| Carol |
| Adam  |
| David |
+-------+
6 rows in set (0.00 sec)

4. 특정 값을 제외하고 내림차순 정렬하기

이제 핵심 쿼리입니다. 아래 쿼리는 'Adam'이라는 이름 하나를 제외한 나머지 값들을 내림차순 기준으로 정렬합니다.

mysql> select *from DemoTable ORDER BY (Name <> 'Adam') DESC,Name;

출력 결과

+-------+
| Name  |
+-------+
| Carol |
| Chris |
| David |
| John  |
| Sam   |
| Adam  |
+-------+
6 rows in set (0.00 sec)

쿼리 동작 원리

위 쿼리가 어떻게 작동하는지 살펴보겠습니다.

(Name <> 'Adam') 표현식은 조건을 만족하면 1(true), 만족하지 않으면 0(false)을 반환합니다. 이 값을 기준으로 DESC(내림차순) 정렬을 적용하면, 값이 1인 행 즉 'Adam'이 아닌 모든 행이 먼저 출력됩니다. 두 번째 정렬 기준인 Name은 첫 번째 조건이 동일한 행들 사이에서 알파벳 순서로 정렬되도록 보조 역할을 합니다.

그 결과, 'Carol', 'Chris', 'David', 'John', 'Sam'이 순서대로 출력되고, 제외 대상인 'Adam'은 가장 마지막에 배치됩니다. 이처럼 불리언 표현식을 ORDER BY 절에 활용하면 특정 값을 우선순위에서 밀어내는 정렬을 손쉽게 구현할 수 있습니다.