假设我有一个类似这样的查询:
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'
,而不是NULL
或0
。但是,当我执行上述查询时,我会为所有行的blob
列获取score
。
答案 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。