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
앞에 1, 1, 1 이 합산되어 3이 나와야 한다는 건가요?
약간 모호한 것이 같은 레코드에 대해 각각 카운트 될 수 있는데.
단순 더하기 한다면? 1개 행이 여러번 중복 카운트 될 수 있는데요. 단순 더하기 하는게 맞는지 의문입니다.
네 1,1,1이 합산되어 3이 나와야하고, 카운트해서 나온 컬럼들을 다 합쳐서 '합계'라는 이름으로 결과가 나왔으면 좋겠네요
-- 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
;