mysql中查询一个商品价格最大的商品名称的sql出错记录
我是这样实现的,select goods_name,max(shop_price) from goods;然后报错如下
查询原因才知道,
这个错误发生在mysql 5.7.5 和以后上,因为5.7.5默认的sql模式配置是
ONLY_FULL_GROUP_BY,
这个配置启用的是 “严格ANSIsql 规则”,严格ANSI sql 规则要求在group by的时候,没有聚合的列,在group by的时候,必须全部包含在group by 的字段中。
没有聚合的列,指的是没有使用 max, min, count, sum....这些函数的列,直接查询出字段的列。
如果不是aggregate 的列,必须要全部包含在集合里面。aggregate 的列,指的大概就是不能聚合的列,没有用函数的列,比如说 avg, sum, count 这些函数的列。用了这些函数的列,可以不包含
也就是说select了没有使用max,min,count,sum这个函数的列而报错。
所以我们可以规定下
改变下sql模式,但是这样查询出来的数据是错的。
我们的数据的最大价格的商品是
kd876知识第一条数据,所以我们获取价格最大的商品的名称,还是利用排序,然后limit 1
select goods_name,shop_price from goods order by shop_price desc limit 1;
其实max和group by有个主意事项就是https://blog.****.net/john_hongming/article/details/42742965
上边连接的出错情况知识,在select了没有使用聚合函数才会出错,如果不用不会出错。