일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 맞춤 이벤트
- 그로스해킹
- Funnel
- 이벤트 매개변수
- 캐글
- segmentation
- oracle
- Kaggle
- API
- 후기
- Google Analytics
- 크로스셀링
- 용어 정리
- tableau
- bigquery
- SQL
- pandas
- 상관계수
- DISTINCT
- Ecommerce
- Ga
- 데이터 분석
- 통계
- Python
- SQLD
- It
- tablueau
- 맞춤 자바스크립트
- sql 개발자
- git
Archives
- Today
- Total
녕녀기의 실험일지
[ Oracle ] ORDER BY + CASE를 사용해 조건에 따른 정렬 순서 정하기 본문
본문으로
안녕하세요. 녀기입니다.
아 너무 졸려요.
연습이랑 포스팅도 거의 졸면서 하고 있습니다.
(출퇴근 4시간은 너무 빡센 것.....)
그래도 해야지 어쩌겠습니까 인생.
오늘은 order by에도 case를 설정할 수 있다는 것을 알고
나중에 안 까먹으려고 포스팅합니다.
바로 들어가시죠~
어우 졸려....
ORDER BY + CASE
select case when g.grade <= 7 then null else s.name end
, g.grade, s.marks
from students s inner join grades g
on s.marks >= g.min_mark and s.marks <= g.max_mark
order by g.grade desc,
(case when g.grade > 7 then s.name else null end),
s.marks asc
위 문제는 학생들의 점수로 등급을 나누고,
8등급 미만의 학생들의 이름은 NULL로 표시하며,
등급에 따라 정렬을 다르게 해야 하는 것이었습니다.
정렬 조건은 아래와 같이
- 첫 번째로 등급 별로 내림차순 정렬
- 학생 등급이 8등급 이상일 때 등급이 동일하다면, 알파벳 순으로 정렬
- 학생 등급이 8등급 미만일 때 등급이 동일하다면, 점수 순으로 오름차순 정렬
이었습니다.
코드 블럭에 있는 CASE 문을 살펴보면
등급(G.GRADE)이 7보다 크면 이름 순(알파벳 순, S.NAME)으로 정렬하고,
아닐 때는 NULL로 정렬합니다.
ORACLE에서 NULL은 가장 큰 값으로 취급돼 아래 행에 출력됩니다.
그 후 NULL인 아이들의 등급이 동일할 때는 점수 순(S.MARKS)으로 오름차순 정렬됩니다.
ORDER BY (CASE WHEN A='a' THEN 1 ELSE 2 END)에는 조건에 따라 순서를 정해줄 수도 있기 때문에,
정렬에 조건을 붙이기 용이합니다.
사실 저렇게 할 수 있다는 것을 안 후,
이것저것 시도해 보다가 안 돼서
다른 사람의 쿼리문을 슬쩍 봤습니다ㅎㅎ
(감사합니다. 인도인 개발자분❤️)
그럼 저는 슬슬 다른 것을 준비해 보러 갈게요~~
누군가에게는 도움이 되길!
(사실 저한테 제일 도움이 됩니다ㅋㅋ)
뿅!

'-- Data -- > - SQL -' 카테고리의 다른 글
[ SQL ] Oracle, MySQL, BigQuery에서 같은 기능, 다른 함수 (0) | 2024.08.19 |
---|---|
[ Oracle ] start with와 connect by를 사용해 부모 노드 확인하기 (0) | 2024.02.22 |
[ Oracle ] 삼각형 분류하기 (0) | 2024.02.22 |
[ Oracle ] NVL, LAG, LEAD, INTERVAL, ROW_NUMBER를 사용해 프로젝트 시작 날짜와 끝난 날짜 출력 (0) | 2024.02.21 |
[ BigQuery ] SQL 쿼리문을 Looker Studio 연동하기 (0) | 2024.02.07 |
Comments