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

如何不使用游标,通过SQL的GROUP BY子句实现指定数据分组统计

用GROUP BY实现分类-日期维度的价格占比计算

完全可以用带GROUP BY的SQL查询实现,不需要依赖游标,这种写法的执行效率通常远高于游标方案。

两种实现方式:

方式1:使用CTE(公共表表达式)分步计算

先分别统计每日各分类的金额总和、当日全分类总金额,再关联计算占比:

WITH cat_daily_sum AS (
    SELECT 
        Category,
        Date,
        SUM(Price) AS category_total
    FROM your_table
    GROUP BY Category, Date
),
daily_total_sum AS (
    SELECT 
        Date,
        SUM(Price) AS daily_total
    FROM your_table
    GROUP BY Date
)
SELECT 
    c.Category,
    c.Date,
    ROUND((c.category_total * 100.0) / d.daily_total, 2) AS Price_Percentage
FROM cat_daily_sum c
JOIN daily_total_sum d ON c.Date = d.Date
ORDER BY c.Date, c.Category;

方式2:使用窗口函数(更简洁)

利用窗口函数直接在分组后计算当日全分类总金额,一步完成:

SELECT 
    Category,
    Date,
    ROUND((SUM(Price) * 100.0) / SUM(SUM(Price)) OVER (PARTITION BY Date), 2) AS Price_Percentage
FROM your_table
GROUP BY Category, Date
ORDER BY Date, Category;

关键说明:

  • 乘以100.0是为了避免整数除法导致结果截断(如MySQL、SQL Server等数据库中整数相除会取整)
  • ROUND(..., 2)用于将结果保留两位小数,和示例中的15.38格式匹配
  • 窗口函数SUM(SUM(Price)) OVER (PARTITION BY Date)的作用是:在按日期划分的分区内,对所有分类的每日求和结果再次求和,得到当日全分类总金额

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:30:01