SQLD: ORDER BY 이해

SeongGyun Hong·2024년 10월 29일

SQL

목록 보기
4/51
post-thumbnail

문제

먼저 주어진 데이터는 이하와 같다.

C1C2
130.24
230.75
330.33
429.62
529.47

원하는 결과가 다음과 같고

C1C2
429.62
529.47
230.75
130.24
330.33

이때 쓰인 쿼리는 다음과 같다

SELECT C1, C2
FROM T1
ORDER BY TRUNC(C2) X ROUND(C2) Y, C2 Z;

X Y Z 가 어떤 것인가?

ORDER BY 순차 계산

먼저 첫번째 적용되는 TRUNC(C2)에 의하여

C1C2
429.62
529.47
130.24
230.75
330.33

이 되고

다시 여기서 동률인 것들(4,5) (1,2,3)에 대하여 ROUND(C2) Y 가 적용되어야 하는 바

원하는 결과가 이하와 같으므로

C1C2
429.62
529.47
230.75
130.24
330.33

Y가 DESC 여야한다.

이후에는 재정렬 된 이하 출력에 관하여 이전 ROUND(C2) DESC에서 동률이었던 것은 (1,3)만 해당하므로 해당 부분에 대하여 적용될 것은 ASC 여야한다.

C1C2
429.62
529.47
230.75
130.24
330.33

짜잔-! 해결 ~!


  • 다만
    ORDER BY 절을 실행할 때 각 정렬 기준이 순차적으로 적용되다가 만약 두 번째 기준까지 정렬이 완료되어 동순위가 없다면, 세 번째 기준은 적용되지 않는다.
    예를 들어, 첫 번째와 두 번째 정렬 기준만으로 모든 데이터가 고유하게 정렬된다면, 세 번째 기준은 무시되는데, 이는 효율성에 기여한다.
profile
헤매는 만큼 자기 땅이다.

0개의 댓글