遇到错误sql_mode = only_full_group_by,所以如何获得所需的结果

问题描述 投票:0回答:1

我有一个简单的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,不再计算最低价格

mysql
1个回答
0
投票

我要回答这个问题,因为我已经在显然没有其他人可以解决的时候才弄清楚;)

感谢本文为我指出了正确的方向: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

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

© www.soinside.com 2019 - 2024. All rights reserved.