WITH data (name, subname, value) AS (
SELECT 'a1', 'val1 ', 20 UNION ALL
SELECT 'a1', 'val2 ', 20 UNION ALL
SELECT 'a1', 'val3 ', 10 UNION ALL
SELECT 'a1', 'val1 ', 40 UNION ALL
SELECT 'a1', 'val2 ', 30 UNION ALL
SELECT 'a2', '2val3', 90 UNION ALL
SELECT 'a2', '2val1', 80 UNION ALL
SELECT 'a2', '2val2', 30 UNION ALL
SELECT 'a2', '2val3', 90 UNION ALL
SELECT 'a2', '2val1', 80 UNION ALL
SELECT 'a2', '2val1', 630
)
SELECT
name,
subname,
percentage = AVG(value) * 100 / SUM(AVG(value)) OVER (PARTITION BY name)
FROM data
GROUP BY
name,
subname
;
Вывод:
name subname percentage
---- ------- -----------
a1 val1 46
a1 val2 38
a1 val3 15
a2 2val1 68
a2 2val2 7
a2 2val3 23
Полезное чтение: