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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了遇到错误sql_mode = only_full_group_by,所以如何获得所需的结果相关的知识,希望对你有一定的参考价值。

我有一个简单的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

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

以上是关于遇到错误sql_mode = only_full_group_by,所以如何获得所需的结果的主要内容,如果未能解决你的问题,请参考以下文章

错误代码:1055 与 sql_mode=only_full_group_by 不兼容

mysql5.6 sql_mode设置为宽松模式

mysql sql_mode=only_full_group_by 错误解析(待确认)

在 MySql Godaddy VPS Cpanel 中使用 sql_mode=only_full_group_by 获取 MYSQL 错误

错误:this is incompatible with sql_mode=only_full_group_by

如何在我的 Mac 上永久设置 SQL_MODE