SELECT SUM returns a row when there are no records

后端 未结 8 1039
囚心锁ツ
囚心锁ツ 2021-01-17 10:38

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

相关标签:
8条回答
  • 2021-01-17 10:57

    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.

    0 讨论(0)
  • 2021-01-17 10:59
    SELECT SUM(dummy) FROM DUAL GROUP BY 1 
    
    0 讨论(0)
  • 2021-01-17 11:03

    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

    0 讨论(0)
  • 2021-01-17 11:09

    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
    
    0 讨论(0)
  • 2021-01-17 11:11

    "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.

    0 讨论(0)
  • 2021-01-17 11:12

    You can filter out the null results with having

    SELECT SUM(dummy) FROM DUAL WHERE 1=2 HAVING SUM(dummy) IS NOT NULL
    
    0 讨论(0)
提交回复
热议问题