oracle 컬럼 개 수의 총합 구하기 3

by wlwns [Oracle 기초] [2023.01.02 12:51:11]


CONTRACTTYPE    CONTRACT_STAT_GB1   CONTRACT_STAT_GB3  CONTRACT_YMD  END YMD               합계 

                   1                               0                              0                      1                1      3

저렇게 합계를 구하려면 쿼리를 어떻게 작성해야 할까요,,

        count(*) - count(CONTRACTTYPE) AS CONTRACTTYPE,
        SUM(DECODE(CONTRACT_STAT_GB,1,1,0)) AS CONTRACT_STAT_GB1,
        SUM(DECODE(CONTRACT_STAT_GB,3,1,0)) AS CONTRACT_STAT_GB3,
        COUNT(CONTRACT_YMD) AS CONTRACT_YMD,
        COUNT(END_YMD) AS END_YMD

 

 

by 마농 [2023.01.02 14:04:37]

앞에 1, 1, 1 이 합산되어 3이 나와야 한다는 건가요?
약간 모호한 것이 같은 레코드에 대해 각각 카운트 될 수 있는데.
단순 더하기 한다면? 1개 행이 여러번 중복 카운트 될 수 있는데요. 단순 더하기 하는게 맞는지 의문입니다.


by wlwns [2023.01.02 14:15:02]

네 1,1,1이 합산되어 3이 나와야하고, 카운트해서 나온 컬럼들을 다 합쳐서 '합계'라는 이름으로 결과가 나왔으면 좋겠네요


by 마농 [2023.01.02 14:46:11]
-- 1. 수식 그대로 한번 더 쓰기 --
SELECT COUNT(*) - COUNT(contracttype) AS contracttype
     , COUNT(DECODE(contract_stat_gb, 1, 1)) AS contract_stat_gb1
     , COUNT(DECODE(contract_stat_gb, 3, 1)) AS contract_stat_gb3
     , COUNT(contract_ymd) AS contract_ymd
     , COUNT(end_ymd) AS end_ymd
     , COUNT(*) - COUNT(contracttype)
     + COUNT(DECODE(contract_stat_gb, 1, 1))
     + COUNT(DECODE(contract_stat_gb, 3, 1))
     + COUNT(contract_ymd)
     + COUNT(end_ymd)
       AS 합계
  FROM ...
 WHERE ...
;

-- 2. 인라인뷰 이용하여 알리아스 사용하기 --
SELECT contracttype
     , contract_stat_gb1
     , contract_stat_gb3
     , contract_ymd
     , end_ymd
     , contracttype
     + contract_stat_gb1
     + contract_stat_gb3
     + contract_ymd
     + end_ymd
       AS 합계
  FROM (SELECT COUNT(*) - COUNT(contracttype) AS contracttype
             , COUNT(DECODE(contract_stat_gb, 1, 1)) AS contract_stat_gb1
             , COUNT(DECODE(contract_stat_gb, 3, 1)) AS contract_stat_gb3
             , COUNT(contract_ymd) AS contract_ymd
             , COUNT(end_ymd) AS end_ymd
          FROM ...
         WHERE ...
        ) a
;

 

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