아래 테이블을 가정해보자.
date | game_account_id | game_actor_id |
---|---|---|
2015-12-25 | n8bt8lun-y1ub-3pg4-903t-geb6d19qx94d | 1 |
2023-04-11 | zuvcwrwc-r771-0kyn-lp5a-gg6073buevnr | 2 |
2018-03-27 | hskzhpj5-tide-grdm-tn0v-ib1vwpoyzx77 | 3 |
데이터를 특정 변수를 기준으로 정렬하기 위해서는 아래와 같은 쿼리를 작성해야할 것이다.
select date_format(date, '%Y-%m') as 'm', game_account_id, game_actor_id
from users
order by m asc, game_actor_id desc;
이때 game_actor_id는 변수이름이 길다. 이러한 변수가 많다면 이를 일일이 적는 데 꽤 시간이 걸릴 수 있다. 이때 아래와 같이 쿼리를 작성하면 동일한 결과를 얻을 수 있다.
select date_format(date, '%Y-%m') as 'm', game_account_id, game_actor_id
from users
order by 1 asc, 3 desc;
위 코드와 아래 코드의 차이점은 m 변수를 1로, game_actor_id를 3으로 대체하여 쿼리를 작성한 점이다. 자세히 보면 숫자는 해당 칼럼의 위치(index)이다.
이상은 아래와 같이 정리할 수 있다.
SQL에서 group by나 order by에 변수를 지정해줄 때 변수명 대신 변수의 인덱스 정보를 이용하여 코드를 압축해 작성할 수 있다.