如何使用grupBy和interval在MySql中计算和?

如何使用grupBy和interval在MySql中计算和?,mysql,Mysql,餐桌销售 date id_product total sales 2018-10-01 1 40 2019-09-01 1 20 2019-11-01 1 5 2019-12-01 1 40 2020-01-01 1 10 2020-02-01 1 15 2020-03-01 1 20 2

餐桌销售

date        id_product  total sales
2018-10-01  1             40
2019-09-01  1             20
2019-11-01  1             5
2019-12-01  1             40
2020-01-01  1             10  
2020-02-01  1             15    
2020-03-01  1             20
2020-08-01  1             10
2021-01-01  1             5
2021-02-01  1             8
2021-04-01  1             12
表产品

id      name
1       Book
2       Pen
如何在MySql中查询以获得数字(序列号/序号)以及间隔3年的累计销售总额,从而得到这样的结果

number name  date  sum_sales   cummulative_sales
1      Book  2018  40          40
2      Book  2019  65          105
3      Book  2020  55          160
4      Book  2021  25          145

使用MySQL 5.7,这将在3年的时间内为您提供一个销售总额和累计销售总额

SELECT (@row = @row + 1) AS number, name, YEAR(date) AS date, 
SUM(total_sales) as sum_sales,
iF(
    @window > 0, 
    @cummulative_sales := @cummulative_sales + SUM(total_sales), 
    @cummulative_sales := SUM(total_sales)
) AS cummulative_sales,
@window := @window + 1,
@window := @window % 3

FROM Sales
JOIN Product ON Sales.id_product = Product.id,
(
    SELECT @row := 0, @cummulative_sales := 0, @window := 0
) as a
GROUP BY name, YEAR(date);

假设您正在运行MySQL 8+,您可以尝试使用
SUM
作为分析函数:

SELECT
    ROW_NUMBER() OVER (PARTITION BY p.name ORDER BY YEAR(s.date)) number,
    p.name,
    YEAR(s.date) AS date,
    SUM(s.total_sales) AS sum_sales,
    SUM(SUM(s.total_sales)) OVER (PARTITION BY p.name ORDER BY YEAR(s.date)) AS cummulative_sales
FROM Sales s
INNER JOIN Product p
    ON p.id = s.id_product
GROUP BY
    p.name,
    YEAR(s.date)
ORDER BY
    p.name,
    YEAR(s.date);

您检查的sameDid的share DB fiddle链接?该问题不使用Interval请在发布之前测试代码,并注意这种方法本质上是不推荐的,而这种方法是不推荐的@Strawberry@variables-在任何情况下,这都不是正确的使用方法@variables正在被使用,而且它也在工作,这不是正确的使用方法。如果这不是正确的使用方法,那么什么是正确的方法呢?不,早在2014年,使用方法也是不正确的(尽管OMG Ponies在同一链接上有一个正确的例子),累计销售价值是不正确的。我想在3年内完成累计销售。示例2020年的值为2018-2020年的累积甜菜蛋白,2021年的值为2019-2021年的累积甜菜蛋白