首页 > 解决方案 > 如何根据不同日期范围的不同费率求和?

问题描述

如何计算一个月的实际价值?

这是我的数据库结构。

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来做到这一点。

标签: 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');

例子


推荐阅读