首页/数据/SQL 速查/占比计算(组内份额)
本包目录(311 条)
查询基础33 条连接与子查询40 条
聚合与窗口函数54 条
函数速查60 条变更与事务52 条性能与执行计划72 条

占比计算(组内份额)

当前行值 ÷ 组内总和:用 SUM(...) OVER (PARTITION BY ...) 得到分母,一次扫描算出份额。

SQL 速查数据更新于 2026-10-12

示例

示例
SELECT product_id, region, sales,
       ROUND(100.0 * sales /
             SUM(sales) OVER (PARTITION BY region), 2) AS share_pct
FROM sales_2024
ORDER BY region, share_pct DESC;
分母SUM(...) OVER (PARTITION BY 维度)
整数除法乘 100.0 或 CAST 保小数
除零分母用 NULLIF 兜底

易错点

  • 分母为 0 或全 NULL 时结果为 NULL,报表要兜底展示
  • GROUP BY 后不能再直接开窗,需要在外层查询或 CTE 里对聚合结果再开窗

数据来源与参考

  • MySQL 8.0 Reference Manual · Window Functions
  • PostgreSQL Documentation · Window Functions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌