根据SQL Server中的总列值计算每行的百分比值
我有一张像下面这样的桌子。我需要根据总列值计算每行的百分比值。如何通过SQL查询实现这一点 我期待这样的结果: 请查找下面的简单计算以获得结果根据SQL Server中的总列值计算每行的百分比值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一张像下面这样的桌子。我需要根据总列值计算每行的百分比值。如何通过SQL查询实现这一点 我期待这样的结果: 请查找下面的简单计算以获得结果 (100 / 1000) * 100 = 10 对于第一个值 (row value / grand total) * 100 你能帮我用SQL查询第一行的值得到10吗?提前谢谢 您可以使用SUM函数作为整个表的分析函数来计算总和。然后,只需将每个地区的成本除以该总和即可得到百分比 SELECT Region, Cost, 10
(100 / 1000) * 100 = 10
对于第一个值
(row value / grand total) * 100
你能帮我用SQL查询第一行的值得到10吗?提前谢谢 您可以使用SUM函数作为整个表的分析函数来计算总和。然后,只需将每个地区的成本除以该总和即可得到百分比
SELECT
Region,
Cost,
100 * Cost / SUM(Cost) OVER () AS Percentage
FROM yourTable
请注意,您还可以使用非相关子查询来查找总成本,例如
(SELECT SUM(Cost) FROM yourTable)
但是我给你的第一个版本可能会比它更好,如果没有其他原因的话,它只需要运行一个查询
输出:
此处演示:
更新:
对于您更新的查询,我可能会使用以下内容:
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;
可以使用SUM函数作为整个表的分析函数来计算总和。然后,只需将每个地区的成本除以该总和即可得到百分比
SELECT
Region,
Cost,
100 * Cost / SUM(Cost) OVER () AS Percentage
FROM yourTable
请注意,您还可以使用非相关子查询来查找总成本,例如
(SELECT SUM(Cost) FROM yourTable)
但是我给你的第一个版本可能会比它更好,如果没有其他原因的话,它只需要运行一个查询
输出:
此处演示:
更新:
对于您更新的查询,我可能会使用以下内容:
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;
您可以通过下面的查询得到一个结果
;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
您可以通过下面的查询得到一个结果
;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
您可以使用交叉联接来联接总成本值。然后使用此值计算百分比,如:。。。交叉连接从mytable中选择SUMcost,因为T-SQL中的100/1000是一个整数除法,将导致值为0。您需要使用十进制值来获得分数结果,例如100.0/1000.0…..您可以使用交叉联接来联接总成本值。然后使用此值计算百分比,如:。。。交叉连接从mytable中选择SUMcost,因为T-SQL中的100/1000是一个整数除法,将导致值为0。您需要使用十进制值来获得分数结果,例如100.0/1000.0…..上述查询工作正常。如果我添加GROUPBY子句,它将抛出一些异常。从表中选择Region,Cost,100*Cost/SUMCost OVER作为百分比,按区域分组,按成本,如何使用group by子句实现这一点。这是您想要的吗?从表中按地区分组选择地区、SUMCOST?你总是可以问另一个问题。这是你想要的吗?从表中按地区分组选择地区、SUMCOST?你总是可以问另一个问题。上面的查询符合我的期望。如果我的表有冗余区域值,如何通过下面的查询在不获取冗余值的情况下实现相同的值。从表组中按区域选择Region,Cost,100*Cost/SUMCost OVER AS Percentage(区域、成本、100*Cost/SUMCost OVER AS Percentage)。使用其他数据更新此问题或只询问一个新问题。上述查询工作正常。如果我添加GROUPBY子句,它将抛出一些异常。从表中选择Region,Cost,100*Cost/SUMCost OVER作为百分比,按区域分组,按成本,如何使用group by子句实现这一点。这是您想要的吗?从表中按地区分组选择地区、SUMCOST?你总是可以问另一个问题。这是你想要的吗?从表中按地区分组选择地区、SUMCOST?你总是可以问另一个问题。上面的查询符合我的期望。如果我的表有冗余区域值,如何通过下面的查询在不获取冗余值的情况下实现相同的值。从表组中按地区选择地区、成本、100*成本/总成本百分比。使用其他数据更新此问题或只询问新问题。