根据SQL Server中的总列值计算每行的百分比值

时间:2017-08-16 05:58:15

标签: sql sql-server sql-server-2008

我有一张如下表格。我需要根据总列值计算每行的百分比值。如何使用SQL查询实现此目的?

enter image description here

我期待这样的结果:

enter image description here

请查看以下简单计算以获得结果。

(100 / 1000) * 100 = 10

表示第一个值。

(row value / grand total) * 100

你可以帮我用SQL查询得到10作为第一行值的结果吗?提前致谢。

2 个答案:

答案 0 :(得分:6)

您可以在整个表格中使用SUM()函数作为分析函数来计算总和。然后,只需将每个区域的成本除以该总和即可获得百分比。

SELECT
    Region,
    Cost,
    100 * Cost / SUM(Cost) OVER () AS Percentage
FROM yourTable

请注意,您可以也使用非相关子查询来查找总费用,例如

(SELECT SUM(Cost) FROM yourTable)

但是我给你的第一个版本可能会胜过,除非它只需要运行一个查询。

<强>输出:

enter image description here

在这里演示:

Rextester

<强>更新

对于您的更新查询,我可能会使用以下内容:

WITH cte AS (
    SELECT
        Region,
        SUM(Cost) AS sum_cost
    FROM yourTable
    GROUP BY Region
)

SELECT
    Region,
    sum_cost,
    100 * sum_cost / SUM(sum_cost) OVER () AS Percentage
FROM cte;

Demo

答案 1 :(得分:0)

您可以使用以下查询获得结果。

;with Sales(region,cost,Total)
    as
    (
    select region,cost,
    (sum(cost) over()) as Total
    from YourTable
    )
    Select Region,Cost,convert(numeric(18,0),Cost/1000*100) as Per from sales