优化列的总结直到他自己

时间:2015-05-31 12:00:21

标签: sql sql-server

我想要总结当前行的列,如下所示:

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秒! 可以建议我任何其他方式来优化查询?

1 个答案:

答案 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;

(我鼓励你总是使用表别名,尤其是相关子查询。)

这种情况很少见,使用游标可能比基于集合的方法更有效。