我需要对特定条件下的值求和

火腿红

我有这样的表:

ID 公里 日期
1 5 20-5-2020
1 9 20-5-2020
3 7 20-5-2020
1 4 10-5-2020
3 2 10_5_2020
4 9 10_5_2020

我需要的是对当月每个 id 的公里数求和,我想要这样的结果:

ID 公里 20 五月 公里 10 五月
1 14 4
3 7 2
4 0 9

我试过这段代码,但没有得到我想要的结果

Select id, 
sum(select km from info where date =='10_5_2020') as 'km 10 may',
Sum(select km from unfo where date == '20-5-2020') as 'km 20 may'
From info
加雷斯博士

您可以CASE在总和中使用表达式来限制求和的内容:

SELECT id, 
        SUM(CASE WHEN date ='10_5_2020' THEN km ELSE 0 END) as 'km 10 may',
        SUM(CASE WHEN date = '20-5-2020' THEN km ELSE 0 END) as 'km 20 may'
From    info
GROUP BY id;

另外值得注意的是,如果您正在选择id和进行聚合,那么您还需要分组id


附录

为了更详细地解释这一点,请考虑 case 表达式在没有 的情况下的作用SUM

ID 公里 日期 CASE WHEN date = '20-5-2020' THEN km ELSE 0 END CASE WHEN date ='10_5_2020' THEN km ELSE 0 END
1 5 20-5-2020 5 0
1 9 20-5-2020 9 0
3 7 20-5-2020 7 0
1 4 10-5-2020 0 4
3 2 10_5_2020 0 2
4 9 10_5_2020 0 9

现在您的 SUM 所做的就是对这些派生列中的值求和。如果您删除ELSE 0then 而不是0您将进入NULL这些列:

ID 公里 日期 CASE WHEN date = '20-5-2020' THEN km END CASE WHEN date ='10_5_2020' THEN km END
1 5 20-5-2020 5 空值
1 9 20-5-2020 9 空值
3 7 20-5-2020 7 空值
1 4 10-5-2020 空值 4
3 2 10_5_2020 空值 2
4 9 10_5_2020 空值 9

你的 SUM 仍然可以工作,但如果没有匹配的值,0你会得到的不是输出NULL

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章