안녕하세요.
CATEGORY 컬럼이 있다치고 그 컬럼에
A
B
C
D
E
등등 있다고 치면 종류별로 3개씩 뽑는방법이 있을까요?
A 카테고리를 가진 데이터 3개 B카테고리를 가진 데이터3개 ... 이런식으로...
분명 방법이 있을거같은데 생각이 안나네요..
샘플 데이터
CATEGORY | DATA |
A | 데이터1 |
A | 데이터2 |
A | 데이터3 |
A | 데이터4 |
A | 데이터5 |
A | 데이터6 |
A | 데이터7 |
B | 데이터8 |
B | 데이터9 |
B | 데이터10 |
B | 데이터11 |
B | 데이터12 |
B | 데이터13 |
.
.
.
~
E 까지
원하는 결과 (카테고리 종류별 데이터3개씩 뽑는다는 가정)
CATEGORY | DATA |
A | 데이터1 |
A | 데이터2 |
A | 데이터3 |
B | 데이터8 |
B | 데이터9 |
B | 데이터10 |
.
.
.
~E까지 3개씩
WITH T ( CATEGORY , DATA ) AS ( SELECT 'A','데이터1' FROM DUAL UNION ALL SELECT 'A','데이터2' FROM DUAL UNION ALL SELECT 'A','데이터3' FROM DUAL UNION ALL SELECT 'A','데이터4' FROM DUAL UNION ALL SELECT 'A','데이터5' FROM DUAL UNION ALL SELECT 'A','데이터6' FROM DUAL UNION ALL SELECT 'A','데이터7' FROM DUAL UNION ALL SELECT 'B','데이터8' FROM DUAL UNION ALL SELECT 'B','데이터9' FROM DUAL UNION ALL SELECT 'B','데이터10' FROM DUAL UNION ALL SELECT 'B','데이터11' FROM DUAL UNION ALL SELECT 'B','데이터12' FROM DUAL UNION ALL SELECT 'B','데이터13' FROM DUAL ) SELECT CATEGORY , DATA FROM (SELECT CATEGORY , DATA , ROW_NUMBER() OVER(PARTITION BY CATEGORY ORDER BY ROWNUM ) RN FROM T ) WHERE RN <= 3 ORDER BY CATEGORY , RN