【发布时间】:2022-01-12 17:45:10
【问题描述】:
我有一个这样的 SQL 数据表,我想计算滚动百分比变化(按行和类别)。所以结果如下所示
我使用的 SQL 查询真的很慢,当有数千个类别时,它需要很长时间才能计算出来,你知道发生了什么吗?或者有什么改进?
首先创建一个示例data_table:
CREATE TABLE IF NOT EXISTS data_table (
id INT AUTO_INCREMENT,
num INT,
category VARCHAR(10),
price FLOAT(20,2),
PRIMARY KEY (id)
);
INSERT INTO data_table(num,category,price)
VALUES(1,"A","10"),
(2,"A","20"),
(3,"A","30"),
(1,"B","20"),
(2,"B","30"),
(3,"B","40");
用于计算百分比变化的 SQL:
SELECT
A.*,
CASE WHEN (A.price IS NULL OR B.price IS NULL OR B.price=0) THEN 0 ELSE
(A.price - B.price)/(B.price) *100 END AS perc
FROM (SELECT
num,
category,
price
FROM data_table
) A LEFT JOIN (SELECT
num,
category,
price
FROM data_table
) B
ON (A.num = B.num+1) AND A.category=B.category;
【问题讨论】:
-
请添加 CREATE TABLE 语句并将数据的图像替换为 markdown 表和/或 INSERT 语句。
-
我刚刚添加了用于创建数据的 SQL @nnichols
-
在 (category, num) 上添加索引可能会有所帮助。
-
升级到 MySQL 后,将提供使用
LAG()的不同解决方案。
标签: mysql sql mysql-5.7 mysql-5.6