본문 바로가기

개발/데이터베이스

[ORACLE] ORDER BY 특정기준으로 정렬하기

반응형

ORDER BY 특정정렬 썸네일


안녕하세요.
가끔 쿼리를 짜다보면 ORDER BY로 정렬을 할 때 일반적인 오름차순이나 내림차순이 아닌 특정한 우선순위가 필요할 때가 있습니다.
그럴 때 사용할 수 있는 방법 2가지를 알아보겠습니다.

 

책번호 책이름 상태
01 자바 연체
02 자바스크립트 대여중
03 파이썬 대여가능
04 데이터베이스 연체
05 ORACLE 대여가능
06 MYSQL 대여중
07 MSSQL 대여중

예를 들어 위의 표와 같은 '책대여'라는 테이블이 있다고 가정하겠습니다.
여기에서 '상태'가 '대여가능'인 자료를 제일 위에 보여줘야할 때 어떻게 해야할까요?

 

ORDER BY + CASE

오라클 뿐만 아니라 다른 곳에서도 사용할 수 있기 때문에 저는 이 방법을 더 많이 씁니다.

 

SELECT
    *
FROM
    책대여
ORDER BY
    (
        CASE
            WHEN 상태 = '대여가능' THEN
                1
            ELSE
                2
        END
    ),
    책번호 ASC;

ORDER BY절 안에 CASE문을 넣어서 임의의 우선순위를 만드는 방법입니다.
'상태'가 '대여가능'이라면 1순위, 그 외에는 2순위로 정렬한 뒤 책번호 오름차순으로 정렬하는 방법입니다.
물론 뒤에 있는 책번호 부분은 자신이 원하는 다른 정렬로 해주셔도 괜찮습니다.

 

책번호 책이름 상태
03 파이썬 대여가능
05 ORACLE 대여가능
01 자바 연체
02 자바스크립트 대여중
04 데이터베이스 연체
06 MYSQL 대여중
07 MSSQL 대여중

위의 쿼리를 실행하면 위와 같이 결과가 나오게 됩니다.

 

ORDER BY + DECODE

이번의 방법은 오라클에서만 가능한 방법입니다.

SELECT *
FROM
    책대여
ORDER BY
    DECODE(상태, '대여가능', 1),
    책번호 ASC;


DECODE 함수는 첫번째 항목의 컬럼이 두번째 값이라면 세번째의 값을 리턴하는 함수입니다.
위의 쿼리의 경우 '상태' 컬럼이 '대여가능'이라면 1을 리턴하게 되겠죠?
그래서 위의 CASE를 사용했을 때와 결과는 똑같이 나오게 됩니다.

CASE WHEN과 DECODE에 대한 사용법은 이전에도 올렸던 적이 있는데 혹시 더 자세하게 알아보고 싶은 분들은 아래의 글을 참고해주세요.

 

[ORACLE] DECODE 함수, CASE WHEN 함수

DECODE 함수 사용법 ▶ 사용방법 DECODE(칼럼명, 조건, 결과, 그 외) ▶ 예시 DECODE(ADDRESS, 'GD', '강동', 'GS', '강서', 'GN', '강남', 'GB', '강북', '기타') 위의 코드를 해석해보면 해당 테이블에 ADDRESS..

smile-place.tistory.com

 

반응형

'개발 > 데이터베이스' 카테고리의 다른 글

ORACLE DEVELOPER 설치 및 설정  (0) 2023.07.12
ALTER TABLE 컬럼명에 특수기호  (0) 2022.08.03
[ORACLE] 테이블명 및 컬럼명 규칙  (0) 2021.12.03
[DB] 트랜잭션  (0) 2021.11.19
[ORACLE] LAG 함수, LEAD 함수  (0) 2021.11.01