MySQL에서 컬럼 값의 마지막 3자를 기준으로 결과를 정렬하려면 ORDER BY 절과 RIGHT() 함수를 함께 사용하면 됩니다. RIGHT() 함수는 문자열의 오른쪽부터 지정한 길이만큼의 문자를 반환하므로, 이를 정렬 기준으로 활용할 수 있습니다.
기본 문법
SELECT *FROM yourTableName ORDER BY RIGHT(yourColumnName,3) yourSortingOrder;
yourSortingOrder 부분에 오름차순은 ASC, 내림차순은 DESC를 입력하여 원하는 정렬 방향을 지정합니다.
예제 테이블 생성하기
문법을 이해하기 위해 먼저 예제 테이블을 만들어 보겠습니다. 아래 쿼리로 테이블을 생성합니다.
mysql> create table OrderByLast3Chars -> ( -> EmployeeId int NOT NULL AUTO_INCREMENT, -> EmployeeName varchar(20), -> EmployeeAge int, -> PRIMARY KEY(EmployeeId) -> ); Query OK, 0 rows affected (0.56 sec)
다음으로 INSERT 명령어를 사용해 테이블에 샘플 데이터를 추가합니다.
mysql> insert into OrderByLast3Chars(EmployeeName,EmployeeAge) values('Carol_901',24);
Query OK, 1 row affected (0.14 sec)
mysql> insert into OrderByLast3Chars(EmployeeName,EmployeeAge) values('Bob_101',21);
Query OK, 1 row affected (0.19 sec)
mysql> insert into OrderByLast3Chars(EmployeeName,EmployeeAge) values('Sam_107',22);
Query OK, 1 row affected (0.20 sec)
mysql> insert into OrderByLast3Chars(EmployeeName,EmployeeAge) values('Mile_677',26);
Query OK, 1 row affected (0.19 sec)
mysql> insert into OrderByLast3Chars(EmployeeName,EmployeeAge) values('John_978',27);
Query OK, 1 row affected (0.75 sec)
mysql> insert into OrderByLast3Chars(EmployeeName,EmployeeAge) values('David_876',29);
Query OK, 1 row affected (0.28 sec)SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from OrderByLast3Chars;
실행 결과는 다음과 같습니다.
+------------+--------------+-------------+ | EmployeeId | EmployeeName | EmployeeAge | +------------+--------------+-------------+ | 1 | Carol_901 | 24 | | 2 | Bob_101 | 21 | | 3 | Sam_107 | 22 | | 4 | Mile_677 | 26 | | 5 | John_978 | 27 | | 6 | David_876 | 29 | +------------+--------------+-------------+ 6 rows in set (0.00 sec)
사례 1: 오름차순(ASC) 정렬
이름 컬럼의 마지막 3자를 기준으로 오름차순 정렬하려면 아래와 같이 쿼리를 작성합니다.
mysql> select *from OrderByLast3Chars -> order by RIGHT(EmployeeName,3) asc;
실행 결과는 다음과 같습니다. 이름 뒤의 숫자가 101 → 107 → 677 → 876 → 901 → 978 순으로 정렬된 것을 확인할 수 있습니다.
+------------+--------------+-------------+ | EmployeeId | EmployeeName | EmployeeAge | +------------+--------------+-------------+ | 2 | Bob_101 | 21 | | 3 | Sam_107 | 22 | | 4 | Mile_677 | 26 | | 6 | David_876 | 29 | | 1 | Carol_901 | 24 | | 5 | John_978 | 27 | +------------+--------------+-------------+ 6 rows in set (0.00 sec)
사례 2: 내림차순(DESC) 정렬
반대로 내림차순으로 정렬하고 싶다면 DESC를 사용합니다.
mysql> select *from OrderByLast3Chars -> order by RIGHT(EmployeeName,3) desc;
실행 결과는 다음과 같습니다.
+------------+--------------+-------------+ | EmployeeId | EmployeeName | EmployeeAge | +------------+--------------+-------------+ | 5 | John_978 | 27 | | 1 | Carol_901 | 24 | | 6 | David_876 | 29 | | 4 | Mile_677 | 26 | | 3 | Sam_107 | 22 | | 2 | Bob_101 | 21 | +------------+--------------+-------------+ 6 rows in set (0.00 sec)
정리
이처럼 ORDER BY RIGHT(컬럼명, 3) 구문을 사용하면 문자열 끝의 특정 자릿수를 기준으로 손쉽게 정렬할 수 있습니다. 파일명 뒤에 붙은 번호나 코드 형태의 데이터를 정렬할 때 특히 유용하게 활용됩니다. 참고로 RIGHT() 함수는 문자열 비교를 수행하므로, 숫자로 된 접미사라도 사전식(lexicographic) 순서로 정렬된다는 점을 유의해야 합니다.