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

请求修正按年份计算Quantity列占比的SQL语句

问题分析与修正方案

原SQL代码的核心问题有两个:

  1. 子查询计算的是全表的Qty总和,而非按年份分组的同年份总和,导致百分比计算的基准错误;
  2. 使用GROUP BY Model, Year做了聚合操作,丢失了原始表的每条记录信息(如ID、原日期),不符合预期输出的格式要求。

修正后的SQL代码(两种实现方式)

方式1:关联按年份分组的子查询

先计算每个年份的总Qty,再关联回原始表计算百分比:

SELECT
    t.ID,
    t.Model,
    t.Year,
    t.Qty,
    ROUND(100.0 * t.Qty / y.YearTotal, 2) AS Percentage
FROM
    tblStore t
INNER JOIN
    (SELECT
         DATEPART(yy, Year) AS YearNum,
         SUM(Qty) AS YearTotal
     FROM
         tblStore
     GROUP BY
         DATEPART(yy, Year)) y ON DATEPART(yy, t.Year) = y.YearNum
ORDER BY
    t.ID;

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

利用窗口函数SUM() OVER (PARTITION BY ...)直接计算同年份的总Qty,无需额外关联:

SELECT
    ID,
    Model,
    Year,
    Qty,
    ROUND(100.0 * Qty / SUM(Qty) OVER (PARTITION BY DATEPART(yy, Year)), 2) AS Percentage
FROM
    tblStore
ORDER BY
    ID;

说明

  • 两种方式都会输出与预期一致的结果:每条原始记录保留ID、原日期,且同年份的百分比总和为100%;
  • 计算时使用100.0而非100是为了避免整数除法导致的精度丢失(例如10/29用整数除法会得到0,用浮点数才能得到正确的小数结果)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 03:10:38