정렬을 요청하는 이유는 대부분 원하는 형태로 값이 출력되길 원해서이다.
이번에 요청받은 대상은 특정값을 파라미터로 전달받아서 해당 사항이 먼저 출력되도록 해달라는 내용이었다.
이런 경우에는 다른 정렬 방식은 그대로 고정해야하므로, 파라미터로 전달받은 대상으로 우선 정렬할 수 있는 정렬값을 둔 뒤 기존의 정렬 방식으로 정렬하도록 진행을 하고자 했다.
원래 기존의 정렬 순서가 아래와 같았다고 가정하자.
ORDER BY seq DESC
저장된 시퀀스의 역순으로 정렬하는 것이 기존의 방식이었다면, 추가로 요청받은 사항은 board_type 의 값을 파라미터로 전달받아 일치하는 대상을 우선적으로 정렬해달라는 요청이었다.
board_type 필드에 A, B, C, D라는 값이 있다.
URL의 get parameter를 통해 type이라는 변수로 정렬을 원하는 값을 전달받는다고 가정했을 때, 전달받은 값을 우선적으로 노출 시키기 위해 ORDER BY 구문에 아래의 내용을 추가하자.
ORDER BY DECODE(board_type, #{type}, 1, 2), seq DESC
Oracle의 DECODE 함수를 이용한 방식으로 변수로 전달받은 type값을 이용하여, 일치하면 1 (또는 더 작은수면 상관없음) 일치하지 않으면 2 (또는 더 큰 수면 상관없음) 으로 선언하여 Ascend 방식으로 정렬하면 원하는 대로 board_type 필드에서 전달받은 변수와 일치하는 내용이 먼저 정렬되어 나타난다.
때로는 새로운 함수와 조인 방식을 찾아내는 것보다 기존의 함수를 잘 응용하는 기술이 중요할 때가 많다고 느낀다.
기존 방식은 사용하던 형태로만 생각하게 되는 경향이 있는데 응용을 위해 오히려 단순하게 생각할 필요도 있겠지?
'DataBase > ORACLE' 카테고리의 다른 글
[ORACLE] 객체 참조를 위한 SYNONYM 생성 및 사용 방법 (0) | 2021.11.29 |
---|---|
[Oracle] 순위 결정을 위한 ROW_NUMBER, RANK, DENSE_RANK 함수 사용법 비교 (0) | 2021.01.27 |
[Oracle] 19c Upgrade : 전환 시 고려사항 (0) | 2020.10.11 |
ORACLE에서 LONG 열에만 입력할 수 있다고 할 때는? (0) | 2013.02.04 |
계층형 메뉴 트리 정렬하기 (3) | 2012.12.31 |