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

MySQL에서 특정 마지막 문자열을 기준으로 정렬하는 쿼리 작성 방법

MySQL에서 특정 마지막 문자열을 기준으로 정렬하는 쿼리 작성 방법

MySQL에서 특정 마지막 문자열(예: 하이픈 뒤에 붙는 접미사)을 기준으로 데이터를 정렬하려면 CASE 문과 ORDER BY 절을 조합하여 사용할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.

1단계: 테이블 생성하기

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

mysql> create table DemoTable
    -> (
    -> ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> ClientName varchar(20)
    -> );
Query OK, 0 rows affected (0.54 sec)

2단계: 샘플 데이터 삽입하기

insert 명령으로 레코드를 추가합니다. 일부 이름에는 '-D' 또는 '-Smith'처럼 하이픈(-) 뒤에 특정 문자열이 포함되어 있습니다.

mysql> insert into DemoTable(ClientName) values('Mike');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(ClientName) values('John');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable(ClientName) values('John-D');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(ClientName) values('John-Smith');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(ClientName) values('Mike-Smith');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(ClientName) values('Mike-D');
Query OK, 1 row affected (0.15 sec)

3단계: 전체 레코드 확인하기

select 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

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

+----------+------------+
| ClientId | ClientName |
+----------+------------+
|        1 | Mike       |
|        2 | John       |
|        3 | John-D     |
|        4 | John-Smith |
|        5 | Mike-Smith |
|        6 | Mike-D     |
+----------+------------+
6 rows in set (0.00 sec)

4단계: 마지막 문자열 기준으로 정렬하기

다음은 특정 마지막 문자열을 기준으로 정렬하는 쿼리입니다.

mysql> select
    -> case
    -> when right(ClientName,length(ClientName)-instr(ClientName,'-')) = `ClientName` THEN ''
    -> else right(`ClientName`,length(`ClientName`)-INSTR(`ClientName`,'-'))
    -> end as `last`,
    -> `ClientName`
    -> from
    -> DemoTable
    -> ORDER BY
    -> `last`,`ClientName`;

쿼리 동작 원리를 살펴보면 다음과 같습니다.

  • INSTR(ClientName, '-'): 이름에서 하이픈('-')의 위치를 찾습니다.
  • RIGHT(ClientName, LENGTH(ClientName) - INSTR(...)): 하이픈 뒤에 있는 부분 문자열(접미사)을 추출합니다.
  • CASE 문: 하이픈이 없어 추출 결과가 원래 이름과 동일한 경우에는 빈 문자열('')을 반환하고, 그렇지 않으면 추출된 접미사를 반환합니다.
  • ORDER BY last, ClientName: 추출된 접미사를 첫 번째 정렬 기준으로 삼고, 같은 접미사 내에서는 이름 순으로 정렬합니다.

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+-------+------------+
| last  | ClientName |
+-------+------------+
|       | John       |
|       | Mike       |
| D     | John-D     |
| D     | Mike-D     |
| Smith | John-Smith |
| Smith | Mike-Smith |
+-------+------------+
6 rows in set (0.00 sec)

결과를 보면 하이픈이 없는 'John'과 'Mike'가 가장 먼저 출력되고, 그다음 '-D'로 끝나는 이름들, 마지막으로 '-Smith'로 끝나는 이름들이 각각 알파벳순으로 정렬된 것을 확인할 수 있습니다. 이처럼 CASE 문과 ORDER BY 절을 함께 활용하면 복잡한 정렬 규칙도 손쉽게 구현할 수 있습니다.