sql - Postgres 中没有子查询的总计算百分比

标签 sql postgresql aggregate-functions percentage

我正在尝试创建一个“占总数的百分比”列,并且目前正在使用一个没有问题的子查询:

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 子句是什么并将其注入(inject)到查询中。该逻辑不考虑上述子查询的存在,因此在返回并重建所有现有逻辑以解决这种情况之前,我想我会先看看是否有其他解决方案。

我试过用窗口函数实现这种效果,但没有成功。

最佳答案

使用窗口函数:

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

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

相关文章:

php - 如果条目存在并且不使用 php 插入,请检查 mysql

SQL 更新列以等于连接中的列并使用子查询

php - 优化 PHP 的数据库查询

sql - 如何在没有日志文件的情况下附加 MDF?

node.js - Sequelize - 如果与另一个模型存在关系,我如何 "select"模型的实例

mysql - 当从子表中获取最新行时,MySQL 对 GROUP BY 和 JOIN 子查询返回不同的结果

sql - Postgresql中根据条件获取上一条记录

postgresql - 如何在 Azure PostgreSQL 上编辑 postgresql.conf?

sql - Postgres SQL - 如何聚合多个连续行的组?

sorting - Cakephp分页按计算字段排序(COUNT)