У меня есть таблица типа:
user_id operation amount
1 purchase 10
1 sale 40
2 purchase 100
2 sale 20
2 conversion 15
3 sale 70
4 conversion 40
, заданная запросом SQL:
SELECT
user_id,
operation,
COUNT(item_num) AS amount
FROM MyTable
GROUP BY user_id, operation
Я хочу рассчитать для каждого пользователя процент от общей суммы для каждогооперации, и было бы неплохо разместить их в столбцах (фактически разделяя числа):
user_id purchase sale conversion
1 10 /50 40 /50 0 /50
2 100 /135 20 /135 15 /135
3 0 /70 70 /70 0 /70
4 0 /40 0 /40 40 /40
РЕДАКТИРОВАТЬ: Благодаря интуиции, приведенной в ответах, я смог найтирешение, которое подходит мне лучше всего
WITH result
AS
(
SELECT
[user_id],
[operation],
CAST(COUNT([item_num]) AS float) AS amount,
SUM(COUNT([item_num])) over(partition by [user_id]) AS total_amount
FROM Mytable
GROUP BY user_id, operation
)
SELECT
[user_id],
ROUND(ISNULL([purchase], 0) / total_amount, 2) AS purchase,
ROUND(ISNULL([sale], 0) / total_amount, 2) AS sale,
ROUND(ISNULL([conversion], 0) / total_amount, 2) AS conversion
FROM result
PIVOT
(
MAX(amount)
FOR operation IN ([purchase], [sale], [conversion])
) x
ORDER BY user_id