오라클 - count에서 case 문 사용하기

2020. 5. 13. 15:17난장 Dev/Database


카운트 하는 여러가지 방법.

 
전체건수에서 성별 구하는 것은 다른 방법으로도 가능하지만, COUNT로 표현하는 방법으로 작성했다.
(예: SUM( DECODE( H_SEX, '1', 1, 0 ) ) 건수_남 )

통계할 때 사용했었는데 DISTINCT안에 CASE 사용하는 것은 처음인 것 같아서...

 1. COUNT 안에서 CASE 문 사용 가능: 전체 건수로 작성하고자 할때
 2. COUNT 안에 DISTINCT + CASE 사용 가능: 중복제거 후 사용하고자 할때


  

 

SELECT
    COUNT(*) 전체건수
    , COUNT( CASE WHEN H_SEX = '1' THEN H_ID END ) 건수_남
    , COUNT( CASE WHEN H_SEX = '2' THEN H_ID END ) 건수_여
    , COUNT( DISTINCT H_ID ) 대상수
    , COUNT( DISTINCT (CASE WHEN H_SEX = '1' THEN H_ID END) ) 대상_남
    , COUNT( DISTINCT (CASE WHEN H_SEX = '2' THEN H_ID END) ) 대상_여
FROM(
    SELECT 1 SEQ, '201910001' H_ID, '1' H_SEX, 'TEST1' CMT FROM DUAL
    UNION
    SELECT 2 SEQ, '201910001' H_ID, '1' H_SEX, 'TEST2' CMT FROM DUAL
    UNION
    SELECT 3 SEQ, '201910001' H_ID, '1' H_SEX, 'TEST3' CMT FROM DUAL
    UNION
    SELECT 4 SEQ, '201910002' H_ID, '2' H_SEX, 'TEST1' CMT FROM DUAL
    UNION
    SELECT 5 SEQ, '201910002' H_ID, '2' H_SEX, 'TEST2' CMT FROM DUAL
    UNION
    SELECT 6 SEQ, '201910003' H_ID, '1' H_SEX, 'TEST1' CMT FROM DUAL
);