도움 부탁드립니다..count문제.. 0 4 1,092

by 감자마늘 [2015.07.21 13:47:08]


안녕하세요.

쿼리 짜던 중 다른 방법이 있지않을까 하고 질문올립니다.

조언 부탁드리겠습니다.

테이블명 : TABLE_A

컬럼 : A, TYPE, CATEG

 

원하는 데이터.

TABLE_A의 전체건수 TYPE이 A인 건수 TYPE이 B인 건수
CATEG가 1인 전체건수 TYPE이 A면서 CATEG가 1인건수 TYPE이 B면서 CATEG가 1인건수
CATEG가 2인 전체건수 TYPE이 A면서 CATEG가 2인건수 TYPE이 B면서 CATEG가 2인건수

이렇게 나오게 하고싶은데...

지금 

SELECT 
    (SELECT count(*) 
        FROM TABLE_A) 전체건수,
    (SELECT count(*) 
        FROM TABLE_A
        WHERE TYPE='A') TYPE_A건수
FROM DUAL
UNION ALL
SELECT 
    (SELECT count(*) 
        FROM TABLE_A
        WHERE CATEG=1) 전체건수_CATEG1,
    (SELECT count(*) 
        FROM TABLE_A
        WHERE TYPE='A'
        AND CATEG=1) TYPE_A건수_CATEG1
FROM DUAL

 

이런식으로 밖에 못하겠어요..

시간이 너무 오래걸리는데..

혹시 다른 방법이 있을까요???

 

도움 요청 드립니다..

by 마농 [2015.07.21 15:41:06]
SELECT categ
     , COUNT(*) cnt
     , COUNT(DECODE(type, 'A', 1)) cnt_a
     , COUNT(DECODE(type, 'B', 1)) cnt_b
  FROM table_a
 GROUP BY categ
 ORDER BY categ
;

 


by 감자마늘 [2015.07.21 17:04:36]

마농님 도움이 많이 되었습니다. 감사합니다.


by 창조의날개 [2015.07.21 15:47:21]

SELECT AA,BB,CC
FROM (
      SELECT SUM(1) A --전체건수
           , SUM(DECDOE(TYPE, 'A', 1, 0)) B --TYPE_A건수
           , SUM(DECDOE(TYPE, 'B', 1, 0)) C --TYPE_B건수
           , SUM(DECDOE(CATEG, 1, 1, 0)) D --CATEG가 1인 전체건수
           , SUM(CASE WHEN TYPE='A' AND CATEG=1 THEN 1 ELSE 0 END) E --TYPE이 A면서 CATEG가 1인건수
           , SUM(CASE WHEN TYPE='B' AND CATEG=1 THEN 1 ELSE 0 END) F --TYPE이 B면서 CATEG가 1인건수
           , SUM(DECDOE(CATEG, 2, 1, 0)) G --CATEG가 2인 전체건수
           , SUM(CASE WHEN TYPE='A' AND CATEG=2 THEN 1 ELSE 0 END) H --TYPE이 A면서 CATEG가 2인건수
           , SUM(CASE WHEN TYPE='B' AND CATEG=2 THEN 1 ELSE 0 END) I --TYPE이 B면서 CATEG가 2인건수
      FROM TABLE_A
)
UNPIVOT (
(AA, BB, CC) FOR gb IN(
  (A,B,C),
  (D,E,F),
  (G,H,I)
))
;

 


by 감자마늘 [2015.07.21 17:05:10]

창조의날개님 감사합니다.

새롭게 본 방식입니다.

 

감사드립니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입