sql_mode=only_full_group_by

提问
我需要从一个表中取pid最多的商品 和商品名称,但是由于数据库默认是开启了sql_mode=only_full_group_by的数据库,在使用group by时就会报错,数据库我又没有权限 所以 在执行sql的时候出现了

img

img


所以为什么 p_id 可以 换成p_name就不行,这两个字段类型 p_id是 int,也不是主键 p_name是varchar

旧版本的mysql没限制,让你为所欲为,像我们用oracle写这种sql就是报错,新版的已经也这么做了,group by查询非分组的字段时,需要使用聚合函数才能可以查询出接过来,不然直接sql报错,你可以用子查询的方式,就可以解决这个问题了

同时根据 p_id ,p_name分组不行么,p_id,p_name不是一一对应?
SELECT p_id ,p_name,count( p_id ) As count FROM v_order_item_info GROUP BY p_id ,p_name ORDER EY count DEsc limt 5;

你这个SQL语句写错了吧 p_name没有聚合

select p_id,p_name,count(p_id) as count 
from v_order_item_info 
group by p_id ,p_name 
order by count(p_id) desc
limit 5;