쿼리 자문을 구합니다. 0 4 2,405

by 로드리 [MySQL] 통계 [2013.07.18 19:28:20]


간단한 쿼리인것 같은데. 당췌 ㅠㅠ 
쿼리 도움 요청 드립니다. 

USERID 컬럼과 TYPE 컬럼이 있습니다.. TYPE 컬럼의 데이터는 A,B,C 세가지 경우의 수 값이 저장되어 있구요. 
각 USERID TYPE의 종류별 카운트를 하려고 합니다...

동일 USERID 로 복수의 레코드가 저장되어 있다고 가정하고
다음과 같은 결과물을 얻고자 합니다. 

___________________________________
|    USERID    |         A    |    B    |    C      |
-------------------------------------------------------------
|    XXX |    nn    |    nn    |    nn    |
-------------------------------------------------------------
|    YYY |    nn    |    nn    |    nn    |
    
......................쭉쭉쭉

어떤 쿼리를 구사해야 할지 도움 요청드립니다~
by 아린 [2013.07.18 19:32:08]
WITH t(userid, type) AS(
SELECT 'usr1', 'A' FROM dual UNION ALL
SELECT 'usr1', 'B' FROM dual UNION ALL
SELECT 'usr1', 'A' FROM dual UNION ALL
SELECT 'usr1', 'C' FROM dual UNION ALL 
SELECT 'usr2', 'B' FROM dual UNION ALL
SELECT 'usr2', 'B' FROM dual UNION ALL
SELECT 'usr2', 'B' FROM dual
)
SELECT userid
     , COUNT(DECODE(type, 'A', 1)) a
     , COUNT(DECODE(type, 'B', 1)) b
     , COUNT(DECODE(type, 'C', 1)) c
  FROM t
 GROUP BY userid 

by 로드리 [2013.07.18 19:46:43]
악!  고맙습니다. 원하는 결과가 나오네요!
DECODE 대신 CASE문을 이용해서 해결했습니다. 
도움 주셔서 고맙습니다. &&

by 강민철 [2013.07.18 20:50:03]

기본적이며 아주 중요한 개념이네요. 감사합니다.~

by 미니호빵 [2013.07.19 00:26:46]
WITH t AS(
SELECT 'usr1' userid, 'A' type FROM dual UNION ALL
SELECT 'usr1', 'B' FROM dual UNION ALL
SELECT 'usr1', 'A' FROM dual UNION ALL
SELECT 'usr1', 'C' FROM dual UNION ALL
SELECT 'usr2', 'B' FROM dual UNION ALL
SELECT 'usr2', 'B' FROM dual UNION ALL
SELECT 'usr2', 'B' FROM dual union all
select 'usr3', 'C' from dual
)
select userid,
count(decode(type,'A',type)) a,
count(decode(type,'B',type)) b,
count(decode(type,'C',type)) c
from (select userid,type,row_number() over(partition by userid order by userid) rn from t)
group by userid order by userid

아린님 with 문 빌려서 요즘 공부중인 로넘,오버,파티션으로 적용해 봤습니다요.. ^^;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입