DevsDawn
DevsDawn

解决MySQL ERROR 3029 错误

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)
若无特别说明,本文采用 CC BY-SA 4.0 协议进行许可。如需转载,请附上本文链接和本声明。
本文链接:https://devsdawn.com/2023/10/solving-mysql-error-3029-error/
DigitalOcean云服务,美国上市公司,注册即送200USD体验金
Vultr云服务,全球25+地域,注册即送100USD体验金

发表回复

textsms
account_circle
email

DevsDawn

解决MySQL ERROR 3029 错误
ERROR 3029 (HY000): Expression #1 of ORDER BY contains aggregate function and applies to the result of a non-aggregated query 这个错误是指在使用聚合函数(如sum, count, max,…
扫描二维码继续阅读
2023-10-19