我有一个查询返回按月分组的销售额总值。我想添加一列,返回与前几行相比增长/下降的百分比。
我已经尝试过使用CREATE TEMPORARY TABLE
,创建一个变量@var :=
,但没有任何效果。理想情况下,我的结果是:
Month | Sales | Perc
1 | 100 | 0
2 | 150 | 50
3 | 100 | -33.33
要做的计算是:((actual_value - previous_value)/previous_value) *100
关于表格,我使用sales
、products
、sales_items
,所以我查询检索按月分组的销售总额是:
SELECT
MONTH(s.sale_date) AS Month,
SUM(p.retail_price * si.quantity) AS Sales_Amount
FROM sales s
INNER JOIN sales_items si ON s.sale_id = si.sale_id
INNER JOIN products p ON si.product_id = p.product_id
WHERE YEAR(s.sale_date) = '2018'
GROUP BY month
ORDER BY month;
因为我正在使用 SUM
来汇总销售项目并将其汇总到每个 sale_id
中,并且在按月分组之后,使用该值似乎很复杂进入一个新的专栏,所以如果有人知道如何去做,那就太好了。
最佳答案
在 MySQL 8.0 中,可以将聚合查询转为子查询,并使用窗口函数 LAG
来访问上个月的值,例如:
SELECT
Sales_Month,
Sales_Amount,
( Sales_Amount - LAG(Sales_Amount) OVER(ORDER BY Sales_Month) )
/LAG(Sales_Amount) OVER(ORDER BY Sales_Month) * 100 AS Percent_Increase
FROM (
SELECT
MONTH(s.sale_date) AS Sales_Month,
SUM(p.retail_price * si.quantity) AS Sales_Amount
FROM sales s
INNER JOIN sales_items si ON s.sale_id = si.sale_id
INNER JOIN products p ON si.product_id = p.product_id
WHERE YEAR(s.sale_date) = '2018'
GROUP BY Sales_Month
) x
ORDER BY Sales_Month
关于mysql - 如何使用以前的值计算百分比增加/减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55425016/