PostgreSQL 子查询总数和百分比

标签 postgresql

表格有销售额,我正在尝试计算销售额和占总额的百分比。

WITH t1 AS (
    SELECT
    product_id,
    sum(financial_charge_cents) as cents
    FROM "account_charges"
    WHERE account_id = 5
    AND status = 'Charged'
    GROUP BY product_id
    ORDER BY cents DESC
)
SELECT 
    product_id, 
    cast(cents as money) / 100.0 AS dollars, 
    cents / (sum(cents) OVER (PARTITION BY product_id)) as percent
FROM t1
ORDER BY dollars DESC

但这会将所有百分比返回为 1 并且不确定原因。

不确定这是类型问题还是什么。

最佳答案

OVER (PARTITION BY produuct_id) 导致总和与 cents 相同。您不需要分区:

SELECT 
    product_id, 
    cast(cents as money) / 100.0 AS dollars, 
    cents* 1.0 / (sum(cents) OVER ()) as percent
FROM t1
ORDER BY dollars DESC

请注意,我添加了 *1.0 以获得数字结果。如果 cents 是数字(不是整数),请跳过它。

关于PostgreSQL 子查询总数和百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47318397/

相关文章:

sql - 是否有为 SQL Server 生成完整数据库 DDL 的工具? Postgres 和 MySQL 呢?

python-3.x - 如何通过 STDIN 将字符串传递给在 python 脚本中执行的终端命令?

java - 如何使用postgresql数据库在hibernate中获取远程端数据库的数据

postgresql - CREATE DATABASE 无法在 pgadmin 4 的事务 block 内运行

java - Hibernate 5.2 在我的表 postgres 上级联删除

python - 将 UTC 时间戳转换为正常日期和时间

Django - 对加密的 TextField 进行注释并将其转换为 FloatField 到小数点后两位

PostgreSQL 选择...更新 : What happens with concurrent long running queries?

mysql - SQL 返回包含非 NULL 数据的字段列表

SQL - 如何更改值