You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL分组后计算占比:如何为分组统计结果添加占比列?

为分组统计结果添加占比列

现有SQL语句可实现按账户分组统计计数,需要新增一列展示该计数在总数中的占比:

现有查询语句

SELECT f.name AS Acc., count(h.fair) AS Count
FROM holes h
JOIN fair f ON f.fair_id = h.fair
GROUP BY f.name

当前输出结果

Acc.Count
A5
B6
C4
D5

期望输出结果

Acc.CountPercentage
A525%
B630%
C420%
D525%

修改后的SQL语句

使用窗口函数SUM() OVER()计算全局总数,再结合分组计数计算占比:

SELECT 
    f.name AS `Acc.`, 
    COUNT(h.fair) AS `Count`,
    CONCAT(ROUND((COUNT(h.fair) / SUM(COUNT(h.fair)) OVER()) * 100, 0), '%') AS `Percentage`
FROM holes h
JOIN fair f ON f.fair_id = h.fair
GROUP BY f.name

说明

  1. SUM(COUNT(h.fair)) OVER():通过窗口函数获取所有分组的计数总和(即全局总数),OVER()不带参数表示作用于整个结果集。
  2. (COUNT(h.fair) / 全局总数) * 100:计算当前分组计数占总数的百分比。
  3. ROUND(..., 0):将百分比结果取整(如果需要保留小数可调整第二个参数,比如保留1位小数用ROUND(...,1))。
  4. CONCAT(..., '%'):将数值拼接成带百分号的字符串格式。

该语句适用于MySQL 8.0+、PostgreSQL、SQL Server等支持窗口函数的数据库。

内容的提问来源于stack exchange,提问作者J Bree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:20:16