【发布时间】:2015-05-12 02:17:36
【问题描述】:
我正在尝试创建一个“总百分比”列,并且当前使用没有问题的子查询:
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 子句是什么,并将其注入到查询中。该逻辑不考虑上述子查询的存在,因此在返回并重建所有现有逻辑以解决这种情况之前,我想我会先看看是否有其他解决方案。
我试过用窗口函数来实现这个效果,但没有成功。
【问题讨论】:
-
你可以使用像
count(*) over ()这样的窗口——假设你实际上是在处理分组数据。但是,如果这是一个性能关键的查询,您可能还是希望使用子查询。
标签: sql postgresql aggregate-functions percentage