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

MySQL에서 특정 레코드를 조회 결과 맨 위에 배치하는 방법

MySQL에서 조회 결과 중 특정 조건에 맞는 레코드를 가장 위쪽에 배치하고 싶다면 ORDER BY CASE 구문을 활용하면 됩니다. 이 글에서는 예제 테이블을 만들고, 실제 쿼리를 통해 원하는 레코드를 상단으로 정렬하는 과정을 단계별로 살펴보겠습니다.

1. 테이블 생성

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

mysql> create table DemoTable
(
    StudentName varchar(100),
    StudentMarks int
);
Query OK, 0 rows affected (0.97 sec)

2. 레코드 삽입

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

mysql> insert into DemoTable values('Chris',45);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('John',67);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('David',89);
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable values('John',98);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Mike',79);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('John',99);
Query OK, 1 row affected (0.11 sec)

3. 전체 레코드 조회

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable;

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

+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| Chris       |           45 |
| John        |           67 |
| David       |           89 |
| John        |           98 |
| Mike        |           79 |
| John        |           99 |
+-------------+--------------+
6 rows in set (0.00 sec)

4. ORDER BY CASE로 특정 레코드 맨 위에 배치하기

이제 핵심인 쿼리입니다. 아래 쿼리는 'John'이라는 이름을 가진 레코드를 결과의 맨 위로 정렬합니다.

mysql> select *from DemoTable order by case when StudentName = 'John' then 1 else 2 end, StudentName, StudentMarks;

실행 결과를 보면 'John' 레코드가 먼저 출력되고, 나머지 레코드가 그 뒤에 정렬되어 있는 것을 확인할 수 있습니다.

+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| John        |           67 |
| John        |           98 |
| John        |           99 |
| Chris       |           45 |
| David       |           89 |
| Mike        |           79 |
+-------------+--------------+
6 rows in set (0.00 sec)

동작 원리와 정리

ORDER BY CASE는 CASE 표현식을 정렬 기준으로 사용하는 방식입니다. 조건에 해당하는 레코드에는 낮은 값(예: 1)을, 나머지에는 더 큰 값(예: 2)을 반환하도록 하면 조건에 맞는 레코드가 자연스럽게 결과 집합의 최상단에 배치됩니다. 이후 StudentName, StudentMarks처럼 추가 정렬 기준을 함께 지정하면 같은 우선순위 그룹 안에서도 일관된 순서로 정렬할 수 있어, 우선순위 정렬이 필요한 목록 화면이나 리포트 쿼리에서 매우 유용하게 활용됩니다.