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

如何在SQL中计算分类数据占比?需为分组结果新增百分比列

解决方法

可以通过先聚合各城市的统计数据,再用窗口函数计算总数占比,修改后的SQL如下:

WITH city_counts AS (
    SELECT 
        city,
        COUNT(DISTINCT id) AS CountofGoogle
    FROM TABLE
    WHERE company_name = 'Google'
    GROUP BY city
)
SELECT 
    city,
    CountofGoogle,
    ROUND((CountofGoogle * 100.0) / SUM(CountofGoogle) OVER (), 2) AS Percentage
FROM city_counts
ORDER BY CountofGoogle DESC;

说明:

  1. 先用CTE(city_counts)聚合每个城市的独立ID数量,避免原SQL中DISTINCT(city)和窗口函数搭配的冗余问题。
  2. SUM(CountofGoogle) OVER () 会计算所有城市的CountofGoogle总和(不加分区就是全局总数)。
  3. 乘以100.0是为了把小数转成百分比形式,ROUND(..., 2)是保留两位小数,可根据需求调整位数。

如果你的SQL版本不支持CTE,也可以用子查询实现:

SELECT 
    city,
    CountofGoogle,
    ROUND((CountofGoogle * 100.0) / SUM(CountofGoogle) OVER (), 2) AS Percentage
FROM (
    SELECT 
        city,
        COUNT(DISTINCT id) AS CountofGoogle
    FROM TABLE
    WHERE company_name = 'Google'
    GROUP BY city
) AS city_counts
ORDER BY CountofGoogle DESC;

原SQL报错的核心原因是直接在原查询里叠加SUM窗口函数时,原查询的partition by city窗口和全局总数的窗口逻辑冲突,先做分组聚合再计算占比会更清晰且避免错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:50:17