반응형
안녕하세요.
가끔 쿼리를 짜다보면 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 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 |