[Oracle] COUNT() OVER 함수 사용하여 특정 컬럼의 그룹별 DISTINCT 개수 구하기

반응형
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 중복 제거한 그룹화한 개수를 구한다.

 

 

반응형

Designed by JB FACTORY