1

谁能帮我计算 SQL 中的运行百分比?假设我们有以下数据:

column 1   column 2
  1          500
  2          499
  3          200
  4           50
  5           10
  6            5

我想知道第 2 列占 80% 的百分比。在示例中,第 2 列的总和为12664。前三行占 94% (500+499+200)/sum(column 2) = 94%:. 在此之后,我将得出结论,3/6 = 行占总数的 80%。

我如何在 SQL 中执行此操作?

4

1 回答 1

4

尽管您必须扩展答案以计算运行百分比,但您几乎有一个关于运行总计的问题的副本。我建议通读链接问题的答案(注意 MSSQL 2012 有语法,万岁!),因为它们比我下面的建议更深入。SUM...OVER

对于您的情况,您可以执行以下操作来获得运行百分比:

DECLARE @table TABLE(col1 INT, col2 FLOAT);

INSERT INTO @table  (col1, col2) 
VALUES (1, 500), (2, 499), (3, 200), (4, 50), (5, 10), (6, 5)

DECLARE @col2total FLOAT = (SELECT SUM(col2) FROM @table)

-- Using subqueries
SELECT      col1, 
            col2, 
            (SELECT SUM(col2) FROM @table sub WHERE sub.col1 <= base.col1) 
            / @col2total
            * 100 AS RunningPercentage
FROM        @table base
ORDER BY    col1

-- Using cross join
SELECT      t1.col1,
            t1.col2,
            SUM (t2.col2) RunningTotal,
            SUM (t2.col2) / @col2total * 100 RunningPercentage
FROM        @table t1 CROSS JOIN @table t2
WHERE       t1.col1 >= t2.col1
GROUP BY    t1.col1, t1.col2
ORDER BY    t1.col1

有了这个,你应该很容易以任何你喜欢的方式获得顶部或底部的 80%。

于 2012-10-17T19:36:38.917 回答