SELECT SUM在没有记录时返回一行

时间:2010-03-13 02:07:49

标签: sql oracle sum

我发现查询存在一些问题,该查询返回表中满足特定条件的所有记录的字段总和。我希望在没有记录的情况下收到“没有找到记录”,但我收到的是无效结果。

SQL> SELECT * FROM DUAL WHERE 1=2;

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

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


SQL>

在这种情况下,有没有办法不接收任何记录?

8 个答案:

答案 0 :(得分:18)

“当没有记录时,我希望收到”没有找到记录“,而是收到空的结果。

然后做

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

类似,但如果只有dummy为null的行,则COUNT(*)将返回摘要行,而后者则不会。

答案 1 :(得分:5)

这个怎么样:

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

答案 2 :(得分:1)

您可以使用null

过滤掉having个结果
SELECT SUM(dummy) FROM DUAL WHERE 1=2 HAVING SUM(dummy) IS NOT NULL

答案 3 :(得分:1)

不 - 这是设计中使用的RDBMS的行为,对我来说至少是有意义的,因为你正在寻找一个总和而不是原始数据

答案 4 :(得分:1)

零数之和等于0(即数学)。 因此,如果没有要求和的记录,选择sum(某物)返回0是很自然的,类似于选择计数(*),如果计数为0,则应该返回0(没有记录满足谓词)。那当然是理想的世界。

答案 5 :(得分:1)

使用mysql的coalesce函数并执行:

SELECT COALESCE(SUM(where),0) FROM table WHERE condition = variable

答案 6 :(得分:1)

SELECT SUM(dummy) FROM DUAL GROUP BY 1 

答案 7 :(得分:0)

您可以按其他指标进行分组。比如月,然后sql也返回0行:

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