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

如何在临时表中按id分组求和amount并保留rowNo列?

解决方案

要实现按id分组求和amount并确保id唯一,同时保留必填的rowNo列,你需要先完成分组聚合,再对聚合后的结果添加行号。正确的SQL写法如下:

SELECT 
    ROW_NUMBER() OVER(ORDER BY min_date) AS rowNo,
    id,
    total_amount
INTO #temptbl
FROM (
    -- 先分组计算每个id的总金额,同时保留用于排序的日期(这里取分组内最早的日期,可根据需求换成MAX(date))
    SELECT 
        id,
        SUM(amount) AS total_amount,
        MIN(date) AS min_date
    FROM sales
    WHERE code = 1000
    GROUP BY id
) AS grouped_sales

关键说明

  • 内层子查询负责按id分组,用SUM(amount)计算每个id的总金额,同时通过MIN(date)或MAX(date)获取分组内的日期值,作为外层生成rowNo的排序依据
  • 外层查询对分组后的结果集使用ROW_NUMBER()生成行号,避免了窗口函数与分组逻辑的冲突
  • 你之前的写法错误在于直接将未聚合的amount和窗口函数与GROUP BY id混用,不符合SQL分组查询的规则——SELECT中的非聚合列必须包含在GROUP BY子句中,而窗口函数不能直接参与分组逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:35:18