如何保护SQL别名不被NULL

时间:2013-03-29 15:20:01

标签: sql sum

虽然我在这里使用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}#

2 个答案:

答案 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}#