일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- ORACLE 상위 N개 추출
- 신용평가 Fraud
- linux 폴더 용량 확인
- 딥러닝
- ORACLE 상위 행 추출
- 행동평점
- jupyter notebook PDF
- Cudnn 버전 확인
- linux 폴더 크기 확인
- 파이썬 테마
- Python Numpy
- 리눅스 저장 용량 확인
- python pandas
- 주식 데이터 수집
- jupyter notebook 테마 변경
- python image list
- 딥러닝 제대로 시작하기
- ORACLE SQL NVL
- 신청평점
- 파이썬 이미지 라벨 저장
- 신용평가 부정사용 평점
- 주피터노트북 테마 변경
- 파이썬 이미지 리스트 변환
- SQL NVL
- 파이썬 이미지 불러오기
- 회수모형
- SQL NULL값 처리
- CSS Fraud Score
- python image load
- ORACLE NULL값 처리
Archives
- Today
- Total
koos808
[Oracle] 상위 N개 데이터 추출하는 방법(서브쿼리 활용), 상위 0.1% 값 추출 본문
SQL(MySQL˙Oracle˙SqlDbx˙Orange)
[Oracle] 상위 N개 데이터 추출하는 방법(서브쿼리 활용), 상위 0.1% 값 추출
koos808 2023. 9. 14. 10:42728x90
반응형
오라클에서 상위 N개의 데이터를 추출하는 방법 여러가지 방법입니다.
서브 쿼리를 사용하여 데이터를 먼저 정렬한 후, 원하는 개수만큼 데이터를 추출하면 된다. 대부분 ROWNUM 키워드를 사용하며, 특수한 경우에 순위 함수(DENSE_RANK)를 사용하여 순위를 부여한 후 순위로 데이터를 추출하기도 한다.
## Ex. 연봉 상위 N개 행 추출
1. 상위 N개 행 추출 방법 - ORDER BY 사용
#상위 n개의 행(ROW) 추출 방법
SELECT empno
, ename
, sal
FROM (
SELECT empno
, ename
, sal
FROM emp
ORDER BY sal DESC
)
WHERE ROWNUM <= 10
==> 연봉(sal)이 높은 순서로 정렬한 후 ROWNUM을 사용하여 10개의 데이터 추출.
(서브 쿼리에서 ORDER BY를 먼저 수행 후 ROWNUM을 사용해야 합니다)
2. 상위 순위 N개 추출 방법 - DENSE_RANK() 함수 사용
# 상위 순위 n개 추출 방법
SELECT empno
, ename
, sal
FROM (
SELECT empno
, ename
, sal
, DENSE_RANK() OVER(ORDER BY sal DESC) AS rnk
FROM emp
)
WHERE rnk <= 10
==> 연봉이 동일한 경우 같은 순위가 부여되므로 11개의 행이 조회된다.(순위 중 동일 값이 있는 경우 만큼 추가 추출됨)
3. 연봉 유니크값 기준 상위 순위 N개 추출 방법
#연봉 유니크값 기준 상위 순위 N개 추출 방법
SELECT empno
, ename
, sal
FROM (
SELECT DISTINCT empno
, ename
, sal
FROM emp
ORDER BY sal DESC
)
WHERE ROWNUM <= 10
==> 서브쿼리에 DISTINCT 추가
4. (심화) 연봉 유니크값 기준 상위 0.1% 연봉 값 추출하기
SELECT NTILE_100, MIN(SAL) MIN
FROM (
SELECT DISTINCT EMPNO, TO_NUMBER(SAL) SAL, NTILE(100) OVER(ORDER BY TO_NUMBER(SAL)) AS NTILE_100
# 그룹별로 상위 1% 집계하고 싶을 땐 NTILE(100) OVER(PARTITION BY 구분컬럼 ORDER BY ~) 로 작성하면 됨
FROM EMP) A
WHERE NTILE_100 = 100
GROUP BY NTITLE_100;
--------------------------------------------------------------------------------------------------------------------
728x90
반응형
'SQL(MySQL˙Oracle˙SqlDbx˙Orange)' 카테고리의 다른 글
ORACLE SQL NULL값 처리 방법(NVL) (0) | 2023.09.20 |
---|---|
ORACLE SQL GREATEST(최대값), LEAST(최소값) (0) | 2023.09.12 |
ORACLE SQL 유저 비밀번호 변경 (0) | 2022.06.28 |
[ORACLE] 테이블 컬럼 이름 변경 (0) | 2022.03.31 |
[ORACLE] 그룹별 최고값,최소값 등 가져오기 (0) | 2022.03.30 |
Comments