I\'m finding some problems with a query that returns the sum of a field from a table for all the records that meet certain conditions. I expected to receive a \"No records f
The sum of zero numbers is equal to 0 (that's math). So it would be only natural for select sum(something) to return 0 if there are no records to sum, similarly to select count(*) that should return 0 if the count is 0 (no records satisfying the predicate). That's in an ideal world of course.
SELECT SUM(dummy) FROM DUAL GROUP BY 1
No - this is the behavior by design of the RDBMS in use here, Which, to me atleast, makes sense, as you are looking for a sum and not raw data
You can group by the another metric. For example month and then sql also returns 0 rows:
SELECT SUM(dummy), DATE_FORMAT(day, '%Y-%m') as month
FROM DUAL WHERE 1=2
GROUP BY month
"I expected to receive a "No records found' when there were no records, but instead I'm receiving a null result."
Then do
SELECT SUM(dummy) FROM DUAL WHERE 1=2 HAVING COUNT(*) > 0
That is, specify that you only want to return a summary where there were rows that were considered.
SELECT SUM(dummy) FROM DUAL WHERE 1=2 HAVING SUM(dummy) IS NOT NULL
is similar, but the COUNT(*) would return a summary row if there were only rows for which dummy was null, while the latter would not.
You can filter out the null
results with having
SELECT SUM(dummy) FROM DUAL WHERE 1=2 HAVING SUM(dummy) IS NOT NULL