MySQL에서 데이터를 최댓값부터 최솟값 순으로(내림차순) 정렬하려면 ORDER BY 절과 length() 함수를 함께 활용하면 됩니다. 특히 숫자가 VARCHAR 타입의 문자열로 저장되어 있을 때, 단순히 문자열 기준으로 정렬하면 의도한 숫자 크기 순서가 나오지 않을 수 있습니다. 이 경우 문자열 길이를 먼저 기준으로 정렬한 뒤 값을 내림차순으로 정렬하면 원하는 결과를 얻을 수 있습니다.
1. 예제 테이블 생성
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Price varchar(20)
-> );
Query OK, 0 rows affected (0.92 sec)
2. 샘플 데이터 삽입
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('80');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('800');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('108');
Query OK, 1 row affected (0.50 sec)
mysql> insert into DemoTable values('765');
Query OK, 1 row affected (0.14 sec)3. 저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-------+
| Price |
+-------+
| 80 |
| 800 |
| 108 |
| 765 |
+-------+
4 rows in set (0.00 sec)
4. 최댓값 → 최솟값 순으로 정렬하는 쿼리
이제 MySQL에서 최댓값부터 최솟값 순으로 정렬하는 핵심 쿼리를 살펴보겠습니다.
mysql> select *from DemoTable
-> order by length(Price) DESC,Price DESC;
실행 결과는 다음과 같습니다.
+-------+
| Price |
+-------+
| 800 |
| 765 |
| 108 |
| 80 |
+-------+
4 rows in set (0.00 sec)
정렬 원리 설명
위 쿼리가 동작하는 방식은 다음과 같습니다.
첫 번째 기준 — length(Price) DESC: 문자열의 길이가 긴 순서대로 정렬합니다. 자릿수가 많은 숫자일수록 값이 크기 때문에, 먼저 자릿수 기준으로 큰 값들을 앞으로 보냅니다.
두 번째 기준 — Price DESC: 자릿수(길이)가 같은 값들 사이에서는 실제 문자열 값을 내림차순으로 비교하여 정렬합니다.
예를 들어 '800'은 세 자리, '80'은 두 자리이므로 '800'이 앞에 위치하고, 같은 두 자리인 값들끼리는 값 자체를 비교해 큰 순서로 배치됩니다. 이 방식은 가격처럼 숫자 형태의 데이터가 문자열 컬럼에 저장된 경우에도 올바른 크기 순서로 정렬할 수 있는 유용한 기법입니다.