我想要总结当前行的列,如下所示:
id mount total
1 1000 1000
2 2500 3500
3 5000 8500
如您所见,总计算总计直到自己。我找到的最佳查询是:
SELECT
*,
(SELECT SUM(mount) from `table` WHERE id <= t.Id) AS total
FROM `table` AS t
但是,在200,000条记录中,大约需要7秒! 可以建议我任何其他方式来优化查询?
答案 0 :(得分:2)
在SQL Server 2008+中,您可以使用累积和函数:
SELECT t.*, SUM(mount) OVER (ORDER BY ID)
FROM `table` t;
否则,有多种方法可以在SQL中表达逻辑,所有这些方法同样效率低下:
SELECT t.*,
(SELECT SUM(t.mount) from `table` t2 WHERE t2.id <= t.Id) AS total
FROM `table` t;
(我鼓励你总是使用表别名,尤其是相关子查询。)
这种情况很少见,使用游标可能比基于集合的方法更有效。