GROUP BY 질문입니다 0 5 2,178

by 봉 [Oracle 기초] [2011.08.31 20:18:30]


WITH TMP AS (
SELECT '2003' YY, '02' P_CD, '03' GUBUN, 'QWE' S_CD FROM DUAL
UNION ALL
SELECT '2003', '02', '03', 'ERW' FROM DUAL
UNION ALL
SELECT '2003', '02', '03', 'RTY' FROM DUAL
UNION ALL
SELECT '2003', '02', '03', 'CXV' FROM DUAL
UNION ALL
SELECT '2003', '02', '01', 'VBN' FROM DUAL
UNION ALL
SELECT '2003', '02', '02', 'GYK' FROM DUAL
UNION ALL
SELECT '2003', '02', '03', 'LEK' FROM DUAL
)
SELECT A.YY,A.P_CD
,A.S_CD
, B.CNT
  FROM TMP A
   INNER JOIN (SELECT YY,P_CD,GUBUN, COUNT(*) OVER() AS CNT
  FROM TMP A
GROUP BY YY, P_CD, GUBUN) B ON A.YY = B.YY AND A.P_CD = B.P_CD
 GROUP BY A.YY, A.P_CD, A.S_CD, B.CNT

위처럼 그룹에 속해있지 않은 칼럼(GUBUN)의 그룹핑갯수를 구하고 싶은데
조인을 안하고 구할 수 있는 방법이 없을까요?
by 허재영 [2011.09.01 09:23:20]
WITH TMP AS (
SELECT '2003' YY, '02' P_CD, '03' GUBUN, 'QWE' S_CD FROM DUAL
UNION ALL SELECT '2003', '02', '03', 'ERW' FROM DUAL
UNION ALL SELECT '2003', '02', '03', 'RTY' FROM DUAL
UNION ALL SELECT '2003', '02', '03', 'CXV' FROM DUAL
UNION ALL SELECT '2003', '02', '01', 'VBN' FROM DUAL
UNION ALL SELECT '2003', '02', '02', 'GYK' FROM DUAL
UNION ALL SELECT '2003', '02', '03', 'LEK' FROM DUAL
)
SELECT YY,P_CD,S_CD,count(distinct(GUBUN)) over() as CNT FROM TMP

by 마농 [2011.09.01 14:00:36]
질문이 모호하여 정확하게 뭐가 맞는지 모르겠네요.
, COUNT(DISTINCT gubun) OVER() cnt
, COUNT(DISTINCT yy||'-'||p_cd||'-'||gubun) OVER() cnt
, COUNT(DISTINCT gubun) OVER(PARTITION BY yy, p_cd) cnt
질문의 쿼리와 같은 것은 두번째 구문이지만
쿼리가 틀린것 같기도 해서 세번째가 맞을것 같다는 생각이 드네요.

by 봉 [2011.09.02 11:29:20]
두가지 다 제가 원하는 답이 안나오네요
그룹바이 A.YY, A.P_CD, A.S_CD 를 하고
그 상태에서 그룹바이에 포함되지 않은 GUBUN(01,02,03)의 갯수 3을 구하고
싶은 거였습니다.

SELECT A.YY,A.P_CD
,A.S_CD
, COUNT(DISTINCT MAX(gubun)) OVER(PARTITION BY yy, p_cd)
FROM TMP A
GROUP BY A.YY, A.P_CD, A.S_CD

마농님의 쿼리에서 약간 수정을 해서 원하는 결과값을 얻긴 했는데
확실히 맞는지 모르겠네요

by 마농 [2011.09.02 11:40:44]
그럼 결국 다른거 다 빼고 구분값만 카운트하면 되는것 아닌가요?
, COUNT(DISTINCT gubun) OVER() cnt

by 봉 [2011.09.02 11:48:17]
아.. 그렇군요 두분 모두 감사합니다
답이 눈앞에 있었는데도 못찾고 있었네요 ㅎㅎ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입