我正在尝试创建一个“Percentage of Total”列,目前使用的子查询没有问题:

SELECT ID, COUNT(*), COUNT(*) / (SELECT COUNT(*)
FROM DATA) AS % OF TOTAL FROM DATA GROUP BY ID;

|  ID  | COUNT | % OF TOTAL |
|  1   |  100  |    0.10    |
|  2   |  800  |    0.80    |
|  3   |  100  |    0.10    |

但是,由于这个问题范围之外的原因,我想看看是否有任何方法可以在不使用子查询的情况下完成这一点。实际上,应用程序使用SQL查询之外的逻辑来确定WHERE子句是什么,并将其注入到查询中。这种逻辑不考虑上述子查询的存在,所以在返回和重建所有现有逻辑来解释这种情况之前,我想我先看看是否有另一个解决方案。
我试过用窗口函数来实现这个效果,但没有用。

最佳答案

使用窗口功能:

SELECT ID, COUNT(*),
       COUNT(*) / SUM(COUNT(*)) OVER () AS "% OF TOTAL"
FROM DATA
GROUP BY ID;

关于sql - Postgres中不包含子查询的总计算百分比,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28967186/

10-11 22:33
查看更多