MySQL에서는 컬럼명이나 식별자를 직접 지정하지 않고도 ORDER BY 절에 컬럼의 위치 번호를 사용해 결과를 정렬할 수 있습니다. 예를 들어 ORDER BY 1은 SELECT 문에서 첫 번째로 선택된 컬럼을 기준으로 정렬하라는 의미입니다.
기본 문법은 다음과 같습니다.
select * from yourTableName order by 1 DESC LIMIT yourLimitValue;
예제 테이블 생성하기
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1325
-> (
-> Id int,
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.69 sec)데이터 삽입하기
INSERT 명령어를 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable1325 values(100,'Chris'); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable1325 values(101,'Bob'); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable1325 values(120,'David'); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1325 values(115,'Sam'); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable1325 values(130,'Carol'); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable1325 values(150,'Mike'); Query OK, 1 row affected (0.15 sec)
저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1325;
실행 결과는 다음과 같습니다.
+------+-------+ | Id | Name | +------+-------+ | 100 | Chris | | 101 | Bob | | 120 | David | | 115 | Sam | | 130 | Carol | | 150 | Mike | +------+-------+ 6 rows in set (0.00 sec)
식별자 없이 내림차순 정렬하기
이제 컬럼명 대신 위치 번호를 사용해 첫 번째 컬럼(Id) 기준으로 내림차순 정렬하고, LIMIT으로 상위 4개 행만 조회해 보겠습니다.
mysql> select * from DemoTable1325 order by 1 DESC LIMIT 4;
실행 결과는 다음과 같습니다.
+------+-------+ | Id | Name | +------+-------+ | 150 | Mike | | 130 | Carol | | 120 | David | | 115 | Sam | +------+-------+ 4 rows in set (0.00 sec)
위 결과를 보면 ORDER BY 1 DESC가 첫 번째 컬럼인 Id를 기준으로 내림차순 정렬했으며, LIMIT 4에 의해 가장 큰 값 4개만 반환된 것을 확인할 수 있습니다.
참고 사항
위치 기반 정렬은 간편하지만, 나중에 SELECT 목록의 컬럼 순서가 바뀌면 의도와 다르게 동작할 수 있으므로 실무에서는 가능한 한 명시적인 컬럼명 사용을 권장합니다.