null이 아닐 때 특정값 표시 0 4 733

by 구루구루구루 [2019.03.29 14:21:14]


SELECT "1학기" AS 학기구분, SUM(SCORE)
FROM STUDENT
WHERE DATE BETWEEN '201903' AND '201905'
UNION ALL
SELECT "2학기", SUM(SCORE)
FROM STUDENT
WHERE DATE BETWEEN '201909' AND '201911';

쿼리를 다음과 같이 짰습니다.
그런데 SUM(SCORE)값이 있으면 학기구분을 출력해주고 NULL일 때는 학기구분도 출력을 해주지 않아서
ROW 개수를 0으로 출력하고싶습니다..
그런데 SUM(SCORE)값이 있든 없든 무조건 출력이 되어 값이 없어도 ROW 개수가 0으로 출력이 안되네요ㅠㅠ
학기구분을 SUM(SCORE)의 NULL 유무에 따라 출력을 하려면 어떻게 해야하나요?ㅠㅠ

by 우리집아찌 [2019.03.29 14:36:15]
— 다음부터는 dbms 명을 표기해주세요

...
..
where date between ‘201903’ and ‘201905’
having sum(score) is not null

union all

..
..
where date between ‘201909’ and ‘201911’
having sum(score) is not null

j


by 마농 [2019.03.29 14:36:31]

위 쿼리대로 했다면? 위와 같은 결과가 나올리가 없습니다.
집계 함수를 사용했으므로 각 결과 1건씩 해서 총 2건이 나오게 됩니다.
출력이 안된다는 것은? 질문의 쿼리와 실제 쿼리가 다르다는 거네요.
실제로 안되는 쿼리를 올려주세요.


by 마농 [2019.03.29 14:39:31]

아!
2건이 나오는걸 아예 안나오게 하고 싶다는 거였군요?
거꾸로 이해했네요.


by 마농 [2019.03.29 14:43:29]
SELECT gubun
     , SUM(score) score
  FROM (SELECT CASE
               WHEN date BETWEEN '201903' AND '201905' THEN '1학기'
               WHEN date BETWEEN '201909' AND '201911' THEN '2학기'
                END gubun
             , score
          FROM student
         WHERE date BETWEEN '201903' AND '201905'
            OR date BETWEEN '201909' AND '201911'
        ) a
 GROUP BY gubun
;

 

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