ERROR 3029 (HY000): Expression #1 of ORDER BY contains aggregate function and applies to the result of a non-aggregated query
这个错误是指在使用聚合函数(如sum, count, max, min等)进行排序时,没有将排序的列包含在分组的列中,或者排序的列与分组的列没有函数依赖关系。这种情况下,MySQL无法确定如何对分组后的结果进行排序,因此会报错。这个错误与MySQL的sql_mode设置有关,如果sql_mode包含only_full_group_by,那么就会出现这个错误。
有两种解决办法:
– 一种是修改sql_mode设置,去掉only_full_group_by这一项,可以在my.cnf配置文件中修改,也可以在MySQL命令行中执行set sql_mode命令修改。
– 另一种是修改SQL语句,将排序的列加入到分组的列中,或者使用子查询来避免这个问题。
例如获取用户信息,根据用户所拥有的优惠券数量排序,需要有group by u.id
部分指定分组字段:
select
u.id,
u.name
from user u
left join user_coupon uc on u.id = uc.user_id
group by u.id
order by count(uc.id)
发表回复