使用GROUP BY和CASE WHEN逻辑时,如何去除结果为空(或零)的结果?
一个假设的例子是:
SELECT City,
SUM(case when name2015 = 'Jane' then income2015 end) income2015_total,
SUM(case when name2020 = 'Jane' then income2020 end) income2020_total
from finaldata
GROUP BY City
与所有人的数据库。这将返回3列,即城市,2015年所有Janes的总收入和2020年所有Janes的总收入。但是,即使没有Janes,也将返回所有城市的行。这些城市的最后2列结果为空。如何在查询中删除这些行,以便仅获取包含至少1个Jane的城市的行?
最佳答案
使用HAVING
子句:
SELECT City,
SUM(CASE WHEN name2015 = 'Jane' THEN income2015 ELSE 0 END) income2015_total,
SUM(CASE WHEN name2020 = 'Jane' THEN income2020 ELSE 0 END) income2020_total
from finaldata
GROUP BY City
HAVING income2015_total <> 0 OR income2020_total <> 0
我在
ELSE 0
表达式中添加了CASE
,以便在没有找到匹配项的情况下,0
返回NULL
而不是SUM
。只要
income2015
和income2020
值始终为正数,上述方法将起作用。Demo here