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

Uma*_*y S 1 sql sql-server sql-server-2008

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

在此输入图像描述

我期待这样的结果:

在此输入图像描述

请找到以下简单计算以获得结果.

(100 / 1000) * 100 = 10
Run Code Online (Sandbox Code Playgroud)

为第一个值.

(row value / grand total) * 100
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*sen 6

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

SELECT
    Region,
    Cost,
    100 * Cost / SUM(Cost) OVER () AS Percentage
FROM yourTable
Run Code Online (Sandbox Code Playgroud)

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

(SELECT SUM(Cost) FROM yourTable)
Run Code Online (Sandbox Code Playgroud)

但是,如果没有其他原因,我给你的第一个版本可能会超过它只需要运行一个查询.

输出:

在此输入图像描述

在这里演示:

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;
Run Code Online (Sandbox Code Playgroud)

演示