gpt4 book ai didi

sql - GROUP BY SQL Server 后的总和百分比

转载 作者:行者123 更新时间:2023-12-02 10:36:43 41 4
gpt4 key购买 nike

我有这些结果:

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 fiddle http://sqlfiddle.com/#!9/80f91/2

最佳答案

您不需要交叉联接。只需使用窗口函数:

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 进行整数除法。我使用十进制数进行此类计算,因此它们更有意义。

Here是一个 SQL Fiddle,有两处变化:

  1. 数据库已更改为 SQL Server。
  2. 总数存储为数字而不是字符串。

关于sql - GROUP BY SQL Server 后的总和百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46909494/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com