postgresql 如何在同一查询中获取SUM列的百分比

n9vozmp4  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(196)

我有一个查询,总和所有的金额分组由不同的类别。我想得到以及%的总和金额的总和。
我的疑问是下一个:

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;

我得到:
| 姓名|总和|
| - -|- -|
| 薪金|二百三十|
| 餐馆|小行星2254|
我怎么能这样做呢?

q7solyqu

q7solyqu1#

将每个总和除以总和,您可以在相同的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 ??

这是因为窗口函数是在聚合函数 * 之后 * 应用的。请参阅:

  • Postgres窗口函数和按异常分组

我删除了到accountscategory_type的连接,假设引用完整性由FK约束强制执行,则这些连接可能只是查询的压舱物,即删除的连接不会删除行。
如果category.id是该表的主键,则使用GROUP BY c.id,并将c.id包括在SELECT列表中。(“name”不一定是唯一的?)请参阅:

  • PostgreSQL - GROUP BY子句

相关问题