【问题标题】:How to get the % of a SUM colum in the same query如何在同一查询中获取 SUM 列的百分比
【发布时间】:2022-11-23 13:15:19
【问题描述】:
我有一个查询,将所有金额 GROUP BY 不同类别相加。我也想获得该 SUM 金额占总数的百分比。
我的查询是下一个:
SELECT category.name, SUM(account.amount_default_currency) FROM account
INNER JOIN accounts ON account.accounts_id = accounts.id
INNER JOIN category ON account.category_id = category.id
INNER JOIN category_type ON category.category_type_id = category_type.id
GROUP BY category.name;
我得到:
| name |
SUM |
| salary |
230 |
| restaurants |
2254 |
我该怎么做?
【问题讨论】:
标签:
sql
postgresql
subquery
aggregate-functions
window-functions
【解决方案1】:
将每个总和除以总和,您可以在相同的 SELECT 中使用聚合函数上的窗口函数获得总和:
SELECT c.name
, sum(a.amount_default_currency) AS sum
, round(sum(a.amount_default_currency) * 100.0
/ sum(sum(a.amount_default_currency)) OVER (), 2) AS pct
FROM category c
JOIN account a ON a.category_id = c.id
GROUP BY c.name; -- c.id ??
这是有效的,因为应用了窗口函数后聚合函数。看:
我删除了对 accounts 和 category_type 的连接,它们可能只是查询的镇流器,假设删除的连接不会消除行。
如果 category.id 是该表的主键,则使用 GROUP BY c.id,并将 c.id 包含在 SELECT 列表中。 (“名称”不一定是唯一的?)见: