programing

SELECT SUM은 레코드가 없을 때 행을 반환합니다.

topblog 2023. 9. 20. 20:02
반응형

SELECT SUM은 레코드가 없을 때 행을 반환합니다.

특정 조건을 충족하는 모든 레코드에 대해 테이블에서 필드의 합계를 반환하는 쿼리에서 몇 가지 문제가 발견되었습니다.기록이 없을 때 "기록을 찾을 수 없다"는 메시지를 받을 것으로 예상했는데, 그 대신에 null 결과를 받고 있습니다.

SQL> SELECT * FROM DUAL WHERE 1=2;

no rows selected
SQL> SELECT SUM(dummy) FROM DUAL WHERE 1=2;

SUM(DUMMY)
----------


SQL>

그런 경우에는 어떤 기록도 받지 못할 방법이 있습니까?

"기록이 없을 때 '기록을 찾을 수 없다'는 말이 나올 것으로 예상했는데 오히려 무효 결과가 나오고 있습니다."

그럼.

SELECT SUM(dummy) FROM DUAL WHERE 1=2 HAVING COUNT(*) > 0

즉, 고려된 행이 있는 경우에만 요약을 반환하도록 지정합니다.

SELECT SUM(dummy) FROM DUAL WHERE 1=2 HAVING SUM(dummy) IS NOT NULL

유사하지만 더미가 null인 행만 있는 경우 COUNT(*)는 요약 행을 반환하고 후자는 반환하지 않습니다.

이거 어때:

select my_sum
from
(SELECT SUM(dummy) as my_sum FROM DUAL WHERE 1=2)
where
my_sum is not null

당신은 그것을 걸러낼 수 있습니다.null와의 결과.having

SELECT SUM(dummy) FROM DUAL WHERE 1=2 HAVING SUM(dummy) IS NOT NULL

아니오 - 이것은 여기서 사용 중인 RDBMS의 설계에 의한 동작입니다. 이것은 적어도 원시 데이터가 아닌 합계를 찾고 있기 때문에 말이 됩니다.

0의 합은 0과 같습니다.따라서 합할 레코드가 없는 경우 선택 합(어떤 것)이 0을 반환하는 것은 자연스러운 일입니다. 카운트가 0(술어를 만족하는 레코드가 없음)인 경우 0을 반환해야 하는 선택 카운트(*)와 유사합니다.그것은 물론 이상적인 세계에 있습니다.

mysql의 연합 함수를 사용하고 다음을 수행합니다.

SELECT COALESCE(SUM(where),0) FROM table WHERE condition = variable
SELECT SUM(dummy) FROM DUAL GROUP BY 1 

다른 메트릭을 기준으로 그룹화할 수 있습니다.예를 들어 month와 sql이 0개의 행을 반환하는 경우:

SELECT SUM(dummy), DATE_FORMAT(day, '%Y-%m') as month
FROM DUAL WHERE 1=2
GROUP BY month

언급URL : https://stackoverflow.com/questions/2436992/select-sum-returns-a-row-when-there-are-no-records

반응형