0

虽然我在这里使用 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.BulkBeanExceptions,但这并不重要)。

我想知道是否有一些 SQL 魔法我可以洒在我的查询上以强制fruitSum为零(0),否则它会为空。所以,像这样:

SELECT
    sum(item_cost) AS fruitSum DEFAULT 0
FROM
    items..fruits
WHERE
    fruit_name = #{value}#
4

2 回答 2

3

如果这是标准 SQL,则使用COALESCE()

SELECT COALESCE(sum(item_cost), 0) AS fruitSum
FROM   items.fruits
WHERE  fruit_name = ...
于 2013-03-29T15:25:19.700 回答
0
SELECT
    sum(NVL(item_cost, 0)) AS fruitSum
FROM
    items..fruits
WHERE
    fruit_name = #{value}#
于 2013-03-29T15:24:08.803 回答