Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个group by和一个sum sql的合计百分比_Sql_Postgresql_Percentage - Fatal编程技术网

两个group by和一个sum sql的合计百分比

两个group by和一个sum sql的合计百分比,sql,postgresql,percentage,Sql,Postgresql,Percentage,我有一张如下所示的表格: 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
------------------------------
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;
完全迷失了下一步的方向。

您可以使用以下方法:

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;
尝试使用窗口功能:

SELECT id, category, SUM(spend),
       SUM(spend) / SUM(SUM(spend)) OVER (PARTITION BY id) as ratio
FROM table
GROUP BY id, category;
这将生成一个介于0和1之间的数字。我不确定您是否真的想将数字格式化为百分比