假设有下列结果集tmp:
type | num |
1 | 5 |
2 | 5 |
需要根据type分组统计百分比如:
type | num | percentage |
1 | 5 | 50% |
2 | 5 | 50% |
使用sum() over()计算百分比的sql如下:
SELECT
tmp.type AS type,
tmp.num AS num,
-- 这里通过case when判断避免除0异常
CASE WHEN SUM (tmp.numm) OVER ()=0 THEN '0.00%' ELSE
round(
CAST (
(
100.0 * tmp.num / SUM (tmp.num) OVER ()
) AS NUMERIC
),
2
) || '%' END AS percentage
from tmp