mysql - 如何根据不同日期范围的不同费率求和?
问题描述
如何计算一个月的实际价值?
这是我的数据库结构。
date, value
2020-03-01 50
2020-03-02 70
2020-03-03 20
2020-03-04 100
2020-03-05 100
但我有前 3 个日期的不同费率和最后 2 个日期的不同费率。
查询前 3 个日期
`SELECT SUM(value) * 5` FROM T1 WHERE date between '2020-03-01' and '2020-03-03';
这将返回700
,因为(50+70+20)*5
.
查询最近 2 个日期,只有费率不同
`SELECT SUM(value) * 3` FROM T1 WHERE date between '2020-03-01' and '2020-03-03';
这将返回600
,因为(100+100)*3
.
这是两个查询,但我想使用单个查询来实现。我试过下面的查询,但它不起作用。
Select (CASE WHEN date < '2020-03-03' THEN SUM(value) * 5 ELSE SUM(value) * 3 END) as totalValue FROM T1 WHERE date between '2020-03-01' and '2020-03-05';
这个查询只返回 700,而不是两者的总和,应该是 700+600 = 1300。它应该返回 1300。
有什么帮助吗?我只想使用mysql来做到这一点。
解决方案
由于您的选择只返回一个值,您可以简单地将结果添加到一起
SELECT
(SELECT
SUM(value) * 5
FROM
T1
WHERE
`date` BETWEEN '2020-03-01' AND '2020-03-03') + (SELECT
SUM(value) * 3
FROM
T1
WHERE
`date` BETWEEN '2020-03-01' AND '2020-03-03');
推荐阅读
- shell - 如何根据时间戳搜索日志文件
- r - 在 ifelse 语句中使用 %in%?
- python - 如何管理烧瓶帐户以在登录时向不同用户显示不同的数据?
- python - Numpy协方差
- django - Django:在创建之前检查实例是否存在
- node.js - 为 Neovim 设置自定义节点版本(路径)
- javascript - 根据值对组进行排序
- json - 从 Kotlin 对象列表创建 JSONObjects 集合
- node.js - 无法在我的项目中安装 graphql-koa 库
- git - git stash pop/apply to specific index include previous index