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

MySQL에서 CASE 문으로 원하는 순서대로 정렬하는 방법

MySQL에서 데이터를 정렬할 때 기본적인 ORDER BY 절은 오름차순 또는 내림차순으로만 정렬합니다. 하지만 특정 값들을 원하는 임의의 순서대로 정렬해야 하는 경우가 종종 발생합니다. 이럴 때 CASE 문을 활용하면 각 값에 우선순위를 부여하여 사용자 지정 순서로 정렬할 수 있습니다.

예제 테이블 생성

먼저 실습에 사용할 테이블을 생성하겠습니다.

mysql> create table DemoTable(StudentId varchar(100));
Query OK, 0 rows affected (1.69 sec)

데이터 삽입

INSERT 명령어를 사용하여 테이블에 몇 개의 레코드를 삽입합니다.

mysql> insert into DemoTable values('STU-980');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable values('STU-1029');
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable values('STU-189');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values('STU-890');
Query OK, 1 row affected (0.38 sec)

저장된 레코드 확인

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

mysql> select *from DemoTable;

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

+-----------+
| StudentId |
+-----------+
| STU-980   |
| STU-1029  |
| STU-189   |
| STU-890   |
+-----------+
4 rows in set (0.00 sec)

현재는 데이터가 삽입된 순서 그대로 출력되고 있습니다.

CASE 문을 사용한 사용자 지정 정렬

이제 CASE 문을 활용하여 학생 ID를 원하는 순서대로 정렬하는 쿼리를 작성해 보겠습니다. 각 조건에 일치하는 값마다 숫자 우선순위(1, 2, 3, 4)를 부여하고, 이 값을 기준으로 오름차순 정렬하는 방식입니다.

mysql> select *from DemoTable
    order by case WHEN StudentId = 'STU-890' THEN 1
    WHEN StudentId = 'STU-1029' THEN 2
    WHEN StudentId = 'STU-980' THEN 3
    WHEN StudentId = 'STU-189' THEN 4
    end;

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

+-----------+
| StudentId |
+-----------+
| STU-890   |
| STU-1029  |
| STU-980   |
| STU-189   |
+-----------+
4 rows in set (0.08 sec)

결과 분석

출력 결과를 보면 데이터가 알파벳순이나 삽입 순서가 아닌, CASE 문에서 지정한 순서(STU-890 → STU-1029 → STU-980 → STU-189)대로 정확히 정렬된 것을 확인할 수 있습니다.

참고 사항

  • CASE 문에서 일치하지 않는 값은 NULL을 반환하며, MySQL에서 NULL은 정렬 시 가장 앞에 위치합니다.
  • 조건에 포함되지 않은 나머지 값들의 순서도 고려해야 한다면 ELSE 절을 추가하여 기본 우선순위를 지정할 수 있습니다.
  • 참고로 MySQL에서는 FIELD() 함수를 사용해도 동일한 결과를 얻을 수 있습니다. 예: ORDER BY FIELD(StudentId, 'STU-890', 'STU-1029', 'STU-980', 'STU-189')

이처럼 CASE 문을 ORDER BY 절과 함께 사용하면 복잡한 비즈니스 로직에 따라 유연하게 정렬 순서를 제어할 수 있어 실무에서 매우 유용하게 활용됩니다.