Sql 通过将SELECT语句中的所有列添加到group by将撤消所需的分组

Sql 通过将SELECT语句中的所有列添加到group by将撤消所需的分组,sql,group-by,presto,Sql,Group By,Presto,我想按供应商_so进行分组(这样每个供应商只有一行,数量相加)。此查询工作正常: 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 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中,并撤消供应商的分组,因此:

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

很明显,每个供应商都有多个值。解决此问题的一种方法是使用聚合函数:

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)

这很有效,谢谢你!你能解释一下为什么我的查询是撤销供应商分组吗?@Helpplease。您的第二个查询工作正常。您刚刚将一堆其他列添加到
groupby
中,因此它没有满足您的需要。