我有一个简单的MySQL查询,试图计算每个VendorPartNumber的最低价格,但我一直在获取sql_mode = only_full_group_by

该表包含具有相同VendorPartNumber的多个行,每个行都有一个唯一的ProductID。
我了解错误的原因以及发生原因,但是在这种情况下,我无法弄清楚如何解决该错误并获得所需的答案。

这是我想做的,但是却给我“完整组”错误

SELECT *,min(p.Price) as mPrice
FROM
    `Products` as p
WHERE p.Active
Group BY p.VendorPartNumber


我知道我收到错误消息是因为mysql不知道要用min(Price)值返回带有单个VendorPartNumber的多个记录中的哪个。它也不能返回具有最低价格的行,因为可能具有相同VendorPartNumber的几种产品具有相同的价格。

我可以做这个

SELECT min(p.Price) as mPrice,`VendorPartNumber`
FROM
    `Products` as p
WHERE p.Active
Group BY p.VendorPartNumber


但是然后我没有得到我需要的所有其他行信息。或者我可以做到这一点

SELECT *,min(p.Price) as mPrice
FROM
    `Products` as p
WHERE p.Active
Group BY p.VendorPartNumber, p.ProductID


但这会拆分VendorPartNumbers,不再计算最低价格

最佳答案

我要回答这个问题,因为我想清楚了,在其他人显然无法解决的时候;)

感谢本文为我指出了正确的方向:https://www.percona.com/blog/2019/05/13/solve-query-failures-regarding-only_full_group_by-sql-mode/
我可以将ProductID和其他所需的值连接起来,可以使用ANY_VALUE()函数(或Min(),Max())。
就我而言,具有相同VendorPartNumber的每个产品的“名称”列将基本相同

SELECT Group_Concat(`ProductID`) as ids,`VendorPartNumber`, min(Price) as mPrice, Any_Value(Name) as name, Max(Stock) as stock
FROM `Products`
WHERE 1
GROUP BY VendorPartNumber


该查询使我能够提取所需的信息,并仍然计算最低价格

10-07 12:13