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
'programing' 카테고리의 다른 글
needle이 배열인 경우 in_array를 어떻게 사용할 수 있습니까? (0) | 2023.09.20 |
---|---|
iOS UI 검색바에서 검색(타이핑 속도 기준)을 조절하는 방법은? (0) | 2023.09.20 |
유닉스와 윈도우 모두에서 작동하는 C의 64비트 정수(uint64_t)에 해당하는 아토이는? (0) | 2023.09.20 |
Spring Data JPA: 규격 쿼리 가져오기 조인 만들기 (0) | 2023.09.20 |
Internet Explorer용 자리 표시자 입력 (0) | 2023.09.20 |