首页/数据/SQL 速查/占比与比率计算
聚合与窗口函数54 条

占比与比率计算

比率 = 部分 / 整体:用聚合相除并防止整数除法与除零;MySQL 与 PostgreSQL 的整数除法行为不同。

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

示例

示例
SELECT city,
       COUNT(*)                                        AS cnt,
       ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER (), 2) AS pct
FROM users
GROUP BY city
ORDER BY cnt DESC;
窗口配合SUM(...) OVER () 得到分母(全部组总量)
防除零分母用 NULLIF(x, 0)
整数除法乘以 100.0 或用 CAST 转小数

易错点

  • PostgreSQL 里 COUNT(*)/COUNT(*) 整数相除会精确保留为 numeric,但列相除整数时先 CAST 更直观
  • 分母为 0 时整个表达式报错或返回 NULL,先 NULLIF 再计算

数据来源与参考

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