两个group by和sql的总百分比

问题描述 投票:2回答:2

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

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
2个回答
0
投票

你可以用这个:

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


0
投票

使用窗口功能:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.