使用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

只要income2015income2020值始终为正数,上述方法将起作用。

Demo here

10-08 06:35