먼저 주어진 데이터는 이하와 같다.
| C1 | C2 |
|---|---|
| 1 | 30.24 |
| 2 | 30.75 |
| 3 | 30.33 |
| 4 | 29.62 |
| 5 | 29.47 |
원하는 결과가 다음과 같고
| C1 | C2 |
|---|---|
| 4 | 29.62 |
| 5 | 29.47 |
| 2 | 30.75 |
| 1 | 30.24 |
| 3 | 30.33 |
이때 쓰인 쿼리는 다음과 같다
SELECT C1, C2
FROM T1
ORDER BY TRUNC(C2) X ROUND(C2) Y, C2 Z;
X Y Z 가 어떤 것인가?
먼저 첫번째 적용되는 TRUNC(C2)에 의하여
| C1 | C2 |
|---|---|
| 4 | 29.62 |
| 5 | 29.47 |
| 1 | 30.24 |
| 2 | 30.75 |
| 3 | 30.33 |
이 되고
다시 여기서 동률인 것들(4,5) (1,2,3)에 대하여 ROUND(C2) Y 가 적용되어야 하는 바
원하는 결과가 이하와 같으므로
| C1 | C2 |
|---|---|
| 4 | 29.62 |
| 5 | 29.47 |
| 2 | 30.75 |
| 1 | 30.24 |
| 3 | 30.33 |
Y가 DESC 여야한다.
이후에는 재정렬 된 이하 출력에 관하여 이전 ROUND(C2) DESC에서 동률이었던 것은 (1,3)만 해당하므로 해당 부분에 대하여 적용될 것은 ASC 여야한다.
| C1 | C2 |
|---|---|
| 4 | 29.62 |
| 5 | 29.47 |
| 2 | 30.75 |
| 1 | 30.24 |
| 3 | 30.33 |
짜잔-! 해결 ~!