【问题标题】:percentage of total on two group by and a sum sql两个group by和总和sql的百分比
【发布时间】:2019-02-12 08:14:31
【问题描述】:

我有一个如下所示的表格:

id     Category     Spend
------------------------------
00001    Apple       10
00001    Oranges     4
00001    Apple       21
00001    Oranges     50
00002    Oranges     32
00002    Apple       2
00002    Oranges     31
Etc.

我正在寻找一个可以显示以下内容的表格

id     Category     Spend_Ratio
------------------------------
00001    Apple       36%
00001    Oranges     64%
00002    Apple       3%
00001    Oranges     97%

逻辑是根据 ID 的类别支出分组生成比率。

我已经做到了这一点:

SELECT id, category, SUM(spend)
FROM table
GROUP BY id, category;

完全不知道下一步该去哪里..

【问题讨论】:

    标签: sql postgresql percentage


    【解决方案1】:

    你可以用这个:

    WITH sum_category AS 
    (
        SELECT id, category,
            SUM(spend) AS spend
        FROM table_name
        GROUP BY id, category
    )
    SELECT id, category,
        ROUND(100 * spend / SUM(spend) OVER (PARTITION BY id)) AS spend_ratio
    FROM sum_category
    ORDER BY id, category;
    

    试试SqLFiddle

    【讨论】:

      【解决方案2】:

      使用窗口函数:

      SELECT id, category, SUM(spend),
             SUM(spend) / SUM(SUM(spend)) OVER (PARTITION BY id) as ratio
      FROM table
      GROUP BY id, category;
      

      这会将该值生成为 0 到 1 之间的数字。我不确定您是否真的要将数字格式化为百分比。

      【讨论】:

        猜你喜欢
        • 2018-04-05
        • 1970-01-01
        • 2016-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-25
        相关资源
        最近更新 更多