将 SELECT 语句中的所有列添加到 group by 撤消我想要的分组

Posted

技术标签:

【中文标题】将 SELECT 语句中的所有列添加到 group by 撤消我想要的分组【英文标题】:Adding all columns in SELECT statement into group by undoes the grouping I want 【发布时间】:2021-08-21 21:57:16 【问题描述】:

我想按供应商_so 分组(这样每个只有 1 行,并且数量只是相加)。这个查询工作得很好:

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

但它并没有给我我想要的所有列。当我将我想要的所有列添加到 SELECT 语句中时,它也会让我将它们添加到 GROUP BY 中,并撤消由供应商_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, qty, item_class, source_filename
order by item_code

【问题讨论】:

【参考方案1】:

您显然对每个供应商都有多个价值观。解决此问题的一种方法是使用聚合函数:

select supplier_so, max(doc_date), max(doc_no), . . .
       sum(CAST(qty AS int)) as qty
FROM table.name
where item_code like 'XXX%' and
      doc_date = '05/28/2021'
group by supplier_so
order by max(item_code)

【讨论】:

成功了,谢谢!您能解释一下为什么我的查询会撤消supplier_so group by 吗? @Helpplease 。 . .您的第二个查询工作正常。 . .您刚刚向 group by 添加了一堆其他列,所以它没有达到您想要的效果。

以上是关于将 SELECT 语句中的所有列添加到 group by 撤消我想要的分组的主要内容,如果未能解决你的问题,请参考以下文章

sql语句中的group by啥意思

Group by

使用 group_by 将第一个创建记录的标识符添加到 select 语句

DB2 SQL:如何将“WHERE EXISTS”表中的列添加到选择语句

sql语句中的group by要怎么用!!

如何在同一个 select 语句中使用 count 和 group by