SUM값을 다시 SUM하는걸 한번에 할 수는 없나요? 0 5 959

by 클로아 [Tibero] [2018.12.11 09:54:09]


티베로입니다.

SUM(SPEC1)+SUM(SPEC2)+SUM(SPEC3)+SUM(SPEC4)+SUM(SPEC5)+SUM(SPEC6)+SUM(SPEC7)+SUM(SPEC8)+SUM(SPEC9)+SUM(SPEC10) AS COL12

 

저 각각의 SPEC값도 SUM을 한 값입니다.

이런식의 쿼리를 단순화 할 방법이 있을까요??

by 마농 [2018.12.11 10:02:43]

sum 해서 더하지 말고, 더해서 sum 하면 됩니다.
단, 주의사항으로 널값이 존재하는지? 확인하셔야 합니다.
SUM(spec1+spec2+spec3+spec4+spec5+spec6+spec7+spec8+spec9+spec10) AS col12
만약, spec1 ~ spec10 이 테이블의 실제 컬럼이라면? 그냥 더해주면 되구요.
혹시, 이 값들이 컬럼이 아닌 중간 과정을 거쳐서 가공된 결과값들 이라면?
쿼리를 좀더 간결하게 바꿀 수 있을 가능성도 있습니다.
만약 그렇다면? 전체 쿼리를 올려주세요.


by 클로아 [2018.12.11 10:09:06]

SUM(SPEC1)+SUM(SPEC2)+SUM(SPEC3)+SUM(SPEC4)+SUM(SPEC5)+SUM(SPEC6)+SUM(SPEC7)+SUM(SPEC8)+SUM(SPEC9)+SUM(SPEC10) AS COL12
FROM (
        SELECT '전체' AS GUBUN,
            CASE WHEN NVL(SPEC1, 0) != 0 THEN 1 ELSE 0 END AS SPEC1,
            CASE WHEN NVL(SPEC2, 0) != 0 THEN 1 ELSE 0 END AS SPEC2,
            CASE WHEN NVL(SPEC3, 0) != 0 THEN 1 ELSE 0 END AS SPEC3,
            CASE WHEN NVL(SPEC4, 0) != 0 THEN 1 ELSE 0 END AS SPEC4,
            CASE WHEN NVL(SPEC5, 0) != 0 THEN 1 ELSE 0 END AS SPEC5,
            CASE WHEN NVL(SPEC6, 0) != 0 THEN 1 ELSE 0 END AS SPEC6,
            CASE WHEN NVL(SPEC7, 0) != 0 THEN 1 ELSE 0 END AS SPEC7,
            CASE WHEN NVL(SPEC8, 0) != 0 THEN 1 ELSE 0 END AS SPEC8,
            CASE WHEN NVL(SPEC9, 0) != 0 THEN 1 ELSE 0 END AS SPEC9,
            CASE WHEN NVL(SPEC10, 0) != 0 THEN 1 ELSE 0 END AS SPEC10,

 

대략 이런식으로 진행되는 쿼리입니다.


by 마농 [2018.12.11 10:17:19]

또 일부분만 올리셔서 spec1 ~ spec10 이 컬럼인지 가공값인지 확인이 안되네요?
개별 항목 값이라면? 모두 더하기 해줄 수 밖에 없구요.
같은 항목을 조건에 따라 나눈 값이라면? 간결하게 바꿀 수 있는 가능성이 있습니다.
쿼리의 의미를 보면 0 이 아닌 건수를 세는 거네요.
항목들의 특성을 파악해야 합니다.
양수만 가능한지? 0 도 있는지? 음수도 가능한지? 널도 존재하는지? 등등


by 클로아 [2018.12.11 10:26:45]

저  SPEC1~SPEC10은 컬럼이고 값이 있고 없고만 계산하려는겁니다. NULL은 존재하고 양수만 있지만 코드값이라 그냥 건수만 세려하는거라 1과 0으로 치환해주고 있습니다.


by 마농 [2018.12.11 10:31:56]

그렇다면? CASE 문은 필요 없고 단순하게 COUNT 만 해주시면 됩니다.
, COUNT(spec1) AS spec1
, COUNT(spec2) AS spec2
또한, 전체라고 표현된 gubun 항목을 보면.
조건에 따라 여러개로 나뉜 union 쿼리일 것 같다는 생각이 듭니다.
같은 테이블을 여러번 반복해서 읽고 있다면?
한번만 읽어서 처리하도록 개선 가능합니다.

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