You need to enable JavaScript to run this app. SELECT添加全列后GROUP BY失效 无法按supplier_so分组求和
优惠活动
大模型
产品
解决方案
定价
更多

SELECT添加全列后GROUP BY失效 无法按supplier_so分组求和

SQL按supplier_so分组并保留全字段的调整方案

你原有SQL的核心问题有两个:

  1. 把需要聚合的qty字段加入了GROUP BY子句,直接拆分了分组粒度,导致求和逻辑失效
  2. 未明确非分组字段在同一个supplier_so下存在多值时的取值规则

以下是两种常用的可行方案:

方案1:窗口函数+行号过滤(灵活控制取值规则)

适合同个supplier_so下非聚合字段存在多值,需要自定义取数规则的场景,示例SQL如下:

WITH so_with_calc AS (
    SELECT 
        doc_date, doc_no, site, doc_type, supplier_so, item_code, item_description,
        -- 按supplier_so分组预计算qty总和
        SUM(CAST(qty AS INT)) OVER (PARTITION BY supplier_so) AS qty,
        item_class, source_filename,
        -- 同个supplier_so下按自定义规则排序取第一行,这里示例按item_code正序取,可自行调整排序字段
        ROW_NUMBER() OVER (PARTITION BY supplier_so ORDER BY item_code) AS row_num
    FROM table.name
    WHERE
        item_code LIKE 'XXX%'
        AND doc_date = '05/28/2021'
)
SELECT doc_date, doc_no, site, doc_type, supplier_so, item_code, item_description, qty, item_class, source_filename
FROM so_with_calc
WHERE row_num = 1
ORDER BY item_code

方案2:GROUP BY+聚合函数(简单直接)

如果同个supplier_so下所有非聚合字段的取值完全一致,直接移除GROUP BY中的qty字段即可,字段和supplier_so一一对应,不会改变原有分组粒度:

SELECT doc_date, doc_no, site, doc_type, supplier_so, item_code, item_description, sum(CAST(qty AS int)) as qty, item_class, source_filename
FROM table.name
where
item_code like 'XXX%'
and
doc_date = '05/28/2021'
group by supplier_so, doc_no, site, doc_type, doc_date, item_code, item_description, item_class, source_filename
order by item_code

如果字段存在多值,可对非聚合字段套聚合函数(比如MAX、MIN,支持ANY_VALUE函数的数据库可以直接用ANY_VALUE取任意值),只保留supplier_so作为分组字段:

SELECT 
    MAX(doc_date) AS doc_date, 
    MAX(doc_no) AS doc_no, 
    MAX(site) AS site, 
    MAX(doc_type) AS doc_type, 
    supplier_so, 
    MAX(item_code) AS item_code, 
    MAX(item_description) AS item_description, 
    SUM(CAST(qty AS INT)) AS qty, 
    MAX(item_class) AS item_class, 
    MAX(source_filename) AS source_filename
FROM table.name
WHERE
    item_code LIKE 'XXX%'
    AND doc_date = '05/28/2021'
GROUP BY supplier_so
ORDER BY item_code

注意说明

如果你的数据库支持相关特性,也可以用FIRST_VALUE等窗口函数自定义取不同字段的规则,满足更复杂的取数需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 21:27:01