일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 그로스해킹
- sql 개발자
- 맞춤 자바스크립트
- tableau
- API
- pandas
- DISTINCT
- bigquery
- SQL
- Ecommerce
- oracle
- 통계
- Funnel
- 맞춤 이벤트
- 캐글
- 용어 정리
- segmentation
- 상관계수
- Google Analytics
- 후기
- It
- tablueau
- git
- 크로스셀링
- 데이터 분석
- Python
- Kaggle
- SQLD
- 이벤트 매개변수
- Ga
- Today
- Total
녕녀기의 실험일지
[ Oracle ] FETCH를 사용한 상위 3개 날짜 추출 본문
본문으로
안녕하세요. 녀기입니다.
이번에는 좀 빨리 돌아오지 않았나요?ㅋㅋㅋㅋ
중간에 연휴가 살~~짝 껴있었기 때문에
금방 돌아왔습니다!!
(사실 완전 쉬는 것도 아니었습니다...
데이콘 하느라 이것저것 바빴어요ㅠㅠ
😱)
오늘도 SQL을 만져 보던 중
제가 한 것보다 더 간단하게 코드를 작성하는 법이 있어
그것을 기록해 놓을까 합니다!!
그럼 들어가 보시죠!
↓ 문제 출처는 아래
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
↓ 참고한 블로그도 아래
https://rimkongs.tistory.com/158
[Oracle] FETCH 구문 사용하기
Oracle 12c release부터 사용할 수 있는 구문이다. 다음과 같이 다대일 관계를 형성하고 있는 INVENTORIES 와 PRODUCTS 테이블을 보자 quantity 컬럼에 대해 top-5를 리턴해준다. SELECT product_name, quantity FROM invento
rimkongs.tistory.com
처음 제가 작성한 코드입니다.
서브 쿼리와 RANK를 이용해서 오래된 날짜 상위 3개를 추출했습니다.
WITH DATE_RANK AS (
SELECT AI.ANIMAL_ID,
RANK() OVER (ORDER BY AI.DATETIME) AS RANK
FROM ANIMAL_INS AI LEFT OUTER JOIN ANIMAL_OUTS AO
ON AI.ANIMAL_ID = AO.ANIMAL_ID
WHERE AO.ANIMAL_ID IS NULL
)
SELECT AI.NAME, AI.DATETIME
FROM ANIMAL_INS AI INNER JOIN DATE_RANK DR
ON AI.ANIMAL_ID = DR.ANIMAL_ID
WHERE DR.RANK <= 3
ORDER BY AI.DATETIME
;
저렇게 되면 코드가 길어지죠.
그래서 FETCH 구문을 사용해 코드를 줄여봅시다.
SELECT AI.NAME, AI.DATETIME
FROM ANIMAL_INS AI LEFT OUTER JOIN ANIMAL_OUTS AO
ON AI.ANIMAL_ID = AO.ANIMAL_ID
WHERE AO.ANIMAL_ID IS NULL
ORDER BY AI.DATETIME
FETCH NEXT 3 ROWS ONLY
;
AI.DATETIME에 대해서 오름차순으로 정렬을 했습니다.
FETCH를 사용해서 정렬된 테이블의 상위 3개 데이터를 추출합니다.
- ONLY를 사용하면 상위 3개만 딱 출력하고
- WITH TIES를 사용하면 마지막에 출력되는 행과 값이 동일한 행도 같이 출력합니다.
만약
FETCH NEXT 3 ROWS WITH TIES
로 쿼리문을 작성하고
3번째로 출력되는 행과 값이 동일한 데이터가 2개 더 있다면,
3 + 2 = 5로
총 5개의 행이 출력됩니다.
저는 ONLY를 사용했기에 3개의 행만 출력되죠.
코테를 연습하면서 좋은 점은
다른 사람의 코드를 볼 수 있는 점이 좋은 것 같습니다.
저보다 잘하시는 분들 것을 보고 더 나은 코드를 작성할 수 있게 되지 않나 싶네요ㅎㅎ
그럼 저는 다시 도망가 보도록 하겠습니다~~
다음에 봐용!

'-- Data -- > - SQL -' 카테고리의 다른 글
[ BigQuery ] 카테고리별 page_view 수 확인 (0) | 2024.02.05 |
---|---|
[ Oracle ] CHR()로 문자 나타내기 (0) | 2023.09.15 |
[ Oracle ] 프로그래머스 코테 DISTINCT, COUNT, 상품을 구매한 회원 구하기 (0) | 2023.08.11 |
[ Oracle ] 프로그래머스 코테 GROUP BY, 카테고리 별 도서 판매량 집계하기 (0) | 2023.06.30 |
[ Oracle ] RANK() OVER를 사용해 정보가 많은 순으로 순위 매기기 (0) | 2023.06.14 |