процент от общей суммы по двум группам и сумме sql - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть таблица, которая выглядит следующим образом:

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%

Логика заключается в создании соотношения на основе группирования расходов по идентификатору.

Мне удалось продвинуться так далеко:

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

Абсолютно потерян, куда идти дальше ..

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Использовать оконные функции:

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

Получается это значение в виде числа от 0 до 1. Я не уверен, действительно ли вы хотите отформатировать число в процентах.

0 голосов
/ 07 сентября 2018

Вы можете использовать это:

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

...