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

MySQL에서 특정 문자열을 기준으로 정렬(ORDER BY)하는 방법

MySQL에서 일반적인 오름차순이나 내림차순 정렬이 아닌, 특정 문자열과 일치하는 데이터를 우선적으로 정렬하고 싶은 경우가 있습니다. 이럴 때는 ORDER BY 절과 CASE 표현식, SUBSTRING() 함수를 함께 사용하면 원하는 결과를 얻을 수 있습니다.

1. 테이블 생성하기

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

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

2. 샘플 데이터 삽입하기

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

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

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

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

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

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

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

3. 전체 레코드 조회하기

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

mysql> select *from DemoTable;

출력 결과

+-----------+
| FirstName |
+-----------+
| John |
| Adam |
| Sam |
| Johnny |
| Joy |
| Jace |
+-----------+
6 rows in set (0.00 sec)

4. 특정 문자열 기준으로 정렬하기

다음은 특정 문자열을 기준으로 정렬하는 쿼리입니다. 예를 들어, 이름이 'Jo'로 시작하는 데이터를 가장 먼저 출력하고 나머지 데이터는 그 뒤에 배치하려면 아래와 같이 작성합니다.

mysql> select *from DemoTable
-> order by case when substring(FirstName, 1, 2) = 'Jo' then 0 else 1 end;

출력 결과

+-----------+
| FirstName |
+-----------+
| John |
| Johnny |
| Joy |
| Adam |
| Sam |
| Jace |
+-----------+
6 rows in set (0.00 sec)

쿼리 동작 원리

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

  • substring(FirstName, 1, 2): 각 이름의 첫 번째 문자부터 2글자를 추출합니다. 예를 들어 'John'에서는 'Jo'가 추출됩니다.
  • CASE WHEN ... THEN 0 ELSE 1 END: 추출된 문자열이 'Jo'와 일치하면 0을 반환하고, 그렇지 않으면 1을 반환합니다.
  • ORDER BY: 반환된 값(0 또는 1)을 기준으로 오름차순 정렬하므로, 'Jo'로 시작하는 행(값 0)이 항상 앞쪽에 위치하게 됩니다.

이 방식을 응용하면 여러 조건을 단계별로 적용할 수도 있습니다. 예를 들어 THEN 0, THEN 1, THEN 2처럼 값을 다르게 부여하면 우선순위에 따라 그룹화된 정렬 결과를 만들 수 있어, 검색 결과 상단 노출이나 카테고리별 정렬 등 실무에서 매우 유용하게 활용됩니다.