遇到错误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 不兼容
mysql sql_mode=only_full_group_by 错误解析(待确认)
在 MySql Godaddy VPS Cpanel 中使用 sql_mode=only_full_group_by 获取 MYSQL 错误