如何使用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年的累积甜菜蛋白