【问题标题】: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 ??
    

    这是有效的,因为应用了窗口函数聚合函数。看:

    我删除了对 accountscategory_type 的连接,它们可能只是查询的镇流器,假设删除的连接不会消除行。

    如果 category.id 是该表的主键,则使用 GROUP BY c.id,并将 c.id 包含在 SELECT 列表中。 (“名称”不一定是唯一的?)见:

    【讨论】:

      猜你喜欢
      • 2013-03-16
      • 2021-11-25
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 2020-10-28
      • 2014-02-03
      • 1970-01-01
      • 2021-10-31
      相关资源
      最近更新 更多