Coding/SQL Query
[Oracle] COUNT() OVER 함수 사용하여 특정 컬럼의 그룹별 DISTINCT 개수 구하기
shbada
2021. 10. 21. 09:55
728x90
반응형
요건사항
USER 테이블에서 USER_GRP_ID 의 그룹 별 USER_GENDER 개수와 USER_AGE 개수를 알고싶다.
- SELECT * FROM USER;
USER_ID | USER_GENDER | USER_AGE | USER_GRP_ID |
1 | F | 22 | U001 |
2 | F | 22 | U001 |
3 | M | 20 | U001 |
4 | M | 20 | U002 |
5 | F | 23 | U003 |
6 | M | 23 | U003 |
- 원하는 결과
USER_GRP_GENDER_CNT | USER_GRP_AGE_CNT | USER_GRP_ID |
2 | 2 | U001 |
1 | 1 | U002 |
2 | 1 | U003 |
- 설명
** U001의 경우
USER_GENDER = F,M, USER_AGE = 22, 20 일 경우로 각 2개, 2개가 나온다.
** U002의 경우
USER_GENDER= M, USER_AGE = 20 일 경우로 각 1개, 1개가 나온다.
** U003의 경우
USER_GENDER = F, M, USER_AGE = 23 일 경우로 각 2개, 1개가 나온다.
수행 쿼리
SELECT DISTINCT
COUNT(DISTINCT T.USER_GENDER) OVER(PARTITION BY T.USER_GRD_ID) AS USER_GRP_GENDER_CNT
, COUNT(DISTINCT T.USER_AGE) OVER (PARTITION BY T.USER_GRD_ID) AS USER_GRP_AGE_CNT
, T.USER_GRP_ID
FROM USER T
WHERE 1 = 1
- COUN() OVER 사용
COUNT(DISTINCT T.USER_GENDER) OVER(PARTITION BY T.USER_GRD_ID) AS USER_GRP_GENDER_CNT
T.USER_GRD_ID 별 USER_GENDER 중복 제거한 그룹화한 개수를 구한다.
반응형