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

MySQL에서 첫 글자를 기준으로 정렬하는 방법 – ORDER BY CASE 활용하기

MySQL에서 데이터를 정렬할 때 단순한 알파벳 순서가 아니라 특정 첫 글자를 우선적으로 정렬하고 싶은 경우가 있습니다. 이럴 때는 ORDER BY 절에 CASE 문을 함께 사용하면 원하는 정렬 규칙을 손쉽게 구현할 수 있습니다.

아래 예제를 통해 실제 동작 과정을 살펴보겠습니다.

1. 예제 테이블 생성

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

mysql> create table DemoTable1535
    -> (
    -> Value varchar(100)
    -> );
Query OK, 0 rows affected (2.26 sec)

2. 샘플 데이터 삽입

INSERT 명령어로 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable1535 values('MySQL is good relational database.');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1535 values('is MySQL easy to lean');
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable1535 values('You need to start basic SQL');
Query OK, 1 row affected (0.35 sec)

3. 전체 레코드 확인

SELECT 문으로 테이블에 저장된 모든 데이터를 조회해 보겠습니다.

mysql> select * from DemoTable1535;

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

+------------------------------------+
| Value                              |
+------------------------------------+
| MySQL is good relational database. |
| is MySQL easy to lean             |
| You need to start basic SQL       |
+------------------------------------+
3 rows in set (0.00 sec)

4. 첫 글자를 기준으로 정렬하는 쿼리

이제 핵심인 정렬 쿼리입니다. LEFT() 함수로 각 값의 첫 번째 문자를 추출하고, CASE 문으로 조건에 따라 정렬 우선순위를 부여합니다.

mysql> select * from DemoTable1535
    -> order by case when left(Value, 1) = 'i' then 1 else 2 end, Value;

실행 결과를 확인해 보겠습니다.

+------------------------------------+
| Value                               |
+------------------------------------+
| is MySQL easy to lean             |
| MySQL is good relational database. |
| You need to start basic SQL       |
+------------------------------------+
3 rows in set (0.00 sec)

출력 결과를 보면 첫 글자가 'i'로 시작하는 레코드가 가장 먼저 표시되고, 나머지 레코드들은 Value 열을 기준으로 오름차순 정렬된 것을 확인할 수 있습니다.

쿼리 동작 원리

  • LEFT(Value, 1): 문자열의 첫 번째 문자를 반환합니다.
  • CASE WHEN ... THEN 1 ELSE 2 END: 첫 글자가 'i'이면 1, 그렇지 않으면 2를 반환하여 정렬 우선순위를 지정합니다.
  • , Value: 동일한 우선순위 그룹 내에서는 Value 열의 알파벳 순으로 정렬됩니다.

이 방식을 응용하면 특정 문자로 시작하는 데이터를 목록 상단에 고정하거나, 여러 조건을 조합한 복잡한 커스텀 정렬 규칙도 손쉽게 구현할 수 있습니다.