我认为您正在寻找这个:
SELECT d1, d2, sum(v)/sum(sum(v)) OVER (PARTITION BY d1) AS share
FROM test
GROUP BY d1, d2;
产生请求的结果。
窗口函数 在 聚合函数 之后 应用。外部sum()
的sum(sum(v)) OVER ...
是一个窗口函数(附加的OVER ...
子句),而内部的sum()
是一个聚合函数。
有效地与:
WITH x AS (
SELECT d1, d2, sum(v) AS sv
FROM test
GROUP BY d1, d2
)
SELECT d1, d2, sv/sum(sv) OVER (PARTITION BY d1) AS share
FROM x;
或(无CTE):
SELECT d1, d2, sv/sum(sv) OVER (PARTITION BY d1) AS share
FROM (
SELECT d1, d2, sum(v) AS sv
FROM test
GROUP BY d1, d2
) x;
或@Mu的变体。