我有这些结果:
PersonID SUM(PA.Total)
-------------------------
1 75
2 75
3 15
4 15
5 60
6 60
与表类似:
PersonID Total
------------------
1 50
2 50
3 10
4 10
5 40
6 40
1 25
2 25
3 5
4 5
5 20
6 20
这些按人分组。现在,我希望添加一列,其中包含根据每个人的总和计算得出的每个人的百分比。
例如:总和为300,因此我需要这样的结果:
PersonID SUM(PA.Total) Percentage
--------------------------------------
1 75 25%
2 75 25%
3 15 5%
4 15 5%
5 60 20%
6 60 20%
我在网上查看了代码,并提出了这样的解决方案:
SELECT
P.PersonID, SUM(PA.Total)
SUM(PA.Total) * 100 / [p] AS 'Percentage'
FROM
Person P
JOIN
Package PA ON P.PersonID = PA.PackageFK
CROSS JOIN
(SELECT SUM(PA.[Total]) AS [p]
FROM Package PA) t
GROUP BY
P.PersonID
但是我不确定如何将交叉联接以及已经存在的分组/求和部分合并到联接中。或者这是否完全正确。
任何帮助将不胜感激-
SQL小提琴http://sqlfiddle.com/#!9/80f91/2
您不需要cross join
。只需使用窗口功能:
SELECT P.PersonID, SUM(PA.Total),
SUM(PA.Total) * 100.0 / SUM(SUM(PA.Total)) OVER () AS Percentage
FROM Person P JOIN
Package PA
ON P.PersonID = PA.PackageFK
GROUP BY P.PersonID;
请注意,您不需要JOIN
此查询:
SELECT PA.PersonID, SUM(PA.Total),
SUM(PA.Total) * 100.0 / SUM(SUM(PA.Total)) OVER () AS Percentage
FROM Package PA
GROUP BY PA.PersonID;
SQL Server执行整数除法。我使用十进制数字进行此类计算,因此更有意义。
这是一个SQL Fiddle,有两个更改:
这显然很简单,但作为一个新手,我被卡住了。 我有一个CSV文件,其中包含3列:州、办公室ID和该办公室的销售额。 我想计算给定州每个办公室的销售额百分比(每个州所有百分比的总和为100%)。 这返回: 我似乎不知道如何“达到”级别,以总计整个的来计算分数。
问题内容: 这显然很简单,但是作为一个笨拙的新手,我陷入了困境。 我有一个包含3列的CSV文件,分别是该办公室的州,办公室ID和销售。 我想计算给定状态下每个办公室的销售百分比(每个州的所有百分比的总和为100%)。 返回: 我似乎无法弄清楚如何“高达”的水平与总起来对整个计算分数。 问题答案: 你将不得不创建第二个对象,但是你可以以一种更简单的方式来计算百分比-仅计算并将该列除以其和即可。复制P
问题内容: 我有一个MSSQL表存储,该存储在表中具有以下列: 有人可以帮我进行SQL查询,以产生占雇员总数(NumEmployees)30%的顶级商店(storeID)吗? 问题答案: WITH cte AS (SELECT storeid, numemployees, ( numemployees * 100 ) / SUM(numemployees) OVER (PARTITION BY 1
问题内容: 样品表 在上面的示例记录中,我想找出客户凭证涵盖的总月数 我需要形式的输出 问题在于,凭证可以有多行用于不同的CategoryIds … 我计算出凭证涵盖的月份为DATEDIFF(MM,StartDate,EndDate)+1 … 当我应用SUM(DATEDIFF(MM,StartDate,EndDate))GROUP BY VoucherId,StartDate,EndDate时,由
我在普罗米修斯有一个直方图,在格拉法纳,我试图得到一个标签的计数随时间的百分比分布的图表。我目前正在尝试类似于 但它没有返回任何值。我做错什么了吗?我只想要label2每个值的计数总和,除以计数总和。
问题内容: 我有这个查询: 它给了我每一行的计数。现在,我想添加第三列,这将给我带来帮助。 我怎样才能做到这一点? 问题答案: 您可以使用子查询来做到这一点: 或带有变量: 在两个示例中,我都将count(*)转换为实数,以避免整数除法类型问题。 希望这对约翰有帮助