一个CASE里面的Mysql SUM

时间:2015-04-16 16:02:33

标签: mysql sql

假设我有一个类似这样的查询:

select 
    table1.column1, 
    table1.column2,
    ...,
    case when foo.id is null then 'N/A' else sum(foo.points) end as score -- same result using ifnull()
from 
    table1 inner join table2 on ...
    left join foo on ...
group by ...

由于我在LEFT JOIN上执行foo,因此可能无法匹配。在这种情况下,我希望score显示为'N/A',而不是NULL0。但是,当我执行上述查询时,我会为所有行的blob列获取score

3 个答案:

答案 0 :(得分:4)

如果结果中包含不同的数据类型,如果找不到常见类型,则会返回数据类型为blob的值。

尝试将总和转换为char:

case when foo.id is null then 'N/A' else cast(sum(foo.points) as char) end as score

答案 1 :(得分:0)

如果你正在分组,你应该把你的总和放在案例中,例如:

sum(case when foo.id is null then 0 else foo.points)

..否则你只是对行值进行求和(意味着只有一个值)。

此外,列应该只有一种数据类型,因此您可能会看到此问题,因为您尝试在同一列中显示数字或文本。

如果您真的想要N / A,可以尝试将数字转换为文本,然后使用coalesce函数处理空值,但是我需要查看您的数据以说出编写上述查询的最佳方式。如果你可以创建一个SQL小提琴,我会非常乐意看看:)

答案 2 :(得分:0)

总结CASE..WHEN的结果。

SUM(CASE WHEN foo.id IS NULL THEN NULL ELSE foo.points) END AS score

当分数字段为空(或等于0)时,您可以在前端应用程序中显示默认值(n / a)。

当foo.id中的所有行都为null时,分数将为NULL。