声明时的MySQL案例

时间:2015-06-23 06:26:02

标签: mysql

使用GROUP BY和CASE WHEN逻辑时,如何使用null(或零)结果去除结果?

一个假设的例子是:

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年所有简氏的总收入,以及2020年所有简氏的总收入。但是,即使他们没有简,它也将为所有城市返回一排。这些城市在最后两列中的结果为空。如何在查询中删除这些内容,以便我只获得包含至少1个Jane的城市的行?

4 个答案:

答案 0 :(得分:1)

你需要一个像这样的WHERE子句:

SELECT City, 
   SUM(case when name2015 = 'Jane' then income2015 end) income2015_total,
   SUM(case when name2020 = 'Jane' then income2020 end) income2020_total
from finaldata
WHERE name2015 = 'Jane' OR name2020 = 'Jane'
GROUP BY City  

答案 1 :(得分:0)

使用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。< / p>

如果income2015income2020值始终为正数,则上述操作将有效。

Demo here

答案 2 :(得分:0)

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
HAVING COUNT(case when 'Jane' in (name2015, name2020) then 1 else null end) > 0

我个人倾向于计算非空值,而不是对1和0求和。由你决定。

答案 3 :(得分:0)

尝试以下 -

[a-zA-Z0-9]+$