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

如何按分类展示比率(SQL Server):代码无法按category_id拆分

按category_id分类计算比率的MS SQL解决方案

没问题,我来帮你调整这个SQL,让它能按category_id分类计算2001年与2002年的比率。

原来的写法是单独计算两年的整体平均值再做除法,没法实现按分类拆分。我们可以用条件聚合的方式,在同一个查询里按category_id分组,分别计算对应年份的平均值,最后直接得到每个分类下的比率:

SELECT
    category_id,
    -- 计算2001年的avg(items*value)
    AVG(CASE WHEN YEAR(data) = 2001 THEN items*value END) AS avg_2001,
    -- 计算2002年的avg(items*value)
    AVG(CASE WHEN YEAR(data) = 2002 THEN items*value END) AS avg_2002,
    -- 计算比率,避免除以0或NULL的错误
    CASE 
        WHEN AVG(CASE WHEN YEAR(data) = 2002 THEN items*value END) IS NOT NULL 
             AND AVG(CASE WHEN YEAR(data) = 2002 THEN items*value END) <> 0
        THEN AVG(CASE WHEN YEAR(data) = 2001 THEN items*value END) / AVG(CASE WHEN YEAR(data) = 2002 THEN items*value END)
        ELSE NULL -- 可根据需求改为0、-1等标记值
    END AS ratio
FROM table1
WHERE YEAR(data) IN (2001, 2002) -- 仅筛选目标年份,提升查询效率
GROUP BY category_id;

关键说明:

  • GROUP BY category_id:确保每个category_id单独计算一组数据,实现分类拆分。
  • 条件聚合:通过CASE WHEN配合AVG函数,只对指定年份的items*value计算平均值,避免了多次子查询的冗余。
  • 除数校验:加入CASE判断处理除数为NULL或0的情况,防止查询抛出错误,你可以根据业务需求调整ELSE部分的返回值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:46:15