我有一张如下所示的表格。我需要根据总列值计算每行的百分比值。如何用SQL查询来实现这一点?根据SQL Server中的总列值计算每行的百分比值
我期待的结果是这样的:
请找到下面的简单计算得到的结果。
(100/1000) * 100 = 10
为第一个值。
(row value/grand total) * 100
你能帮我把第一行的值与SQL查询结果得到10吗?提前致谢。
我有一张如下所示的表格。我需要根据总列值计算每行的百分比值。如何用SQL查询来实现这一点?根据SQL Server中的总列值计算每行的百分比值
我期待的结果是这样的:
请找到下面的简单计算得到的结果。
(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;
上面的查询工作正常。如果我添加group by子句,会引发一些异常。 选择 地区, 成本, 100 *成本/(成本)总和OVER()以百分比 从yourTable组各地区,成本 如何by子句与集团实现这一目标。 –
这是你想要的吗? 'SELECT Region,SUM(COST)FROM yourTable GROUP BY Region'?你总是可以提出另一个问题。 –
这是你想要的吗? 'SELECT Region,SUM(COST)FROM yourTable GROUP BY Region'?你总是可以提出另一个问题。 –
你可以得到的结果与下面的查询。
;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
您可以使用'CROSS JOIN'加入总成本值。然后使用此值来计算百分比,如下所示:'... CROSS JOIN(SELECT SUM(cost)FROM mytable)** t ** –
**谨慎**:T-SQL中的'100/1000'是**整数**除法,并将导致** 0 **的值。您需要使用** decimal **值来获得分数结果,例如'100.0/1000.0' ..... –