虽然我在这里使用iBatis进行o / r映射,但这绝对是一个纯粹的SQL问题。我只提到iBatis以提供完整的上下文。
我有一张表items..fruits
:
fruit_id fruit_name fruit_color fruit_cost
=====================================================
1 apple red 12
2 pear brown 70
3 apple green 18
...
6485 banana yellow 30
6486 plum purple <null>
6487 kiwi green 85
请注意:由于我无法控制的原因,fruit_cost
可以为空。
我有一个iBatis SQL查询,总结了表中所有水果的成本(按名称):
SELECT
sum(item_cost) AS fruitSum
FROM
items..fruits
WHERE
fruit_name = #{value}#
正如您所看到的,当我们为apple
运行此查询时,返回的fruitSum
将为30(12 + 18)。但是当我们为plum
运行它时,我们得到NULL(实际上,在我的完整代码中,我得到net.sf.cglib.beans.BulkBeanException
s,但这并不重要。)
我想知道是否有一些SQL魔法我可以在我的查询上强制fruitSum
强制为零(0),否则它将为空。所以,像这样:
SELECT
sum(item_cost) AS fruitSum DEFAULT 0
FROM
items..fruits
WHERE
fruit_name = #{value}#
答案 0 :(得分:3)
如果这是标准SQL,请使用COALESCE()
:
SELECT COALESCE(sum(item_cost), 0) AS fruitSum
FROM items.fruits
WHERE fruit_name = ...
答案 1 :(得分:0)
SELECT
sum(NVL(item_cost, 0)) AS fruitSum
FROM
items..fruits
WHERE
fruit_name = #{value}#