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

SQL如何查询每日各分类占比:获取单日总计数计算百分比

解决方案

方法1:使用窗口函数(推荐,兼容所有支持SQL标准窗口函数的数据库,如MySQL 8.0+、PostgreSQL、SQL Server等)

直接在现有分组查询的基础上,用SUM() OVER (PARTITION BY event_day)窗口函数直接计算单日总记录数,再计算占比即可:

SELECT 
    event_day,
    Category,
    ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (PARTITION BY event_day), 0) AS `%`
FROM my_table
GROUP BY event_day, Category;

说明:SUM(COUNT(*)) OVER (PARTITION BY event_day)会先按event_day分组,把同一天内所有分类的count值求和,得到单日总记录数,不需要额外关联子查询,执行效率更高。

方法2:子查询关联(兼容不支持窗口函数的旧版本数据库,如MySQL 5.x)

先单独写子查询统计每天的总记录数,再和你现有的分组统计结果关联计算占比:

SELECT 
    t1.event_day,
    t1.Category,
    ROUND(t1.category_count * 100.0 / t2.day_total, 0) AS `%`
FROM (
    -- 原有按天、分类统计数量的逻辑
    SELECT event_day, Category, COUNT(*) AS category_count
    FROM my_table
    GROUP BY event_day, Category
) t1
JOIN (
    -- 子查询统计单日总记录数
    SELECT event_day, COUNT(*) AS day_total
    FROM my_table
    GROUP BY event_day
) t2 ON t1.event_day = t2.event_day;

两种方法执行后均可得到你需要的预期输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:45:04