MySQL是否支持expression_[Err] 1055 - Expression 关于mysql的 group by 的问题

在MySQL 5.7.20版本中,执行SQL查询时遇到1055错误,该错误由于开启了ONLY_FULL_GROUP_BY模式导致。此模式不允许在GROUP BY之外直接查询未聚合的列。解决方法包括修改my.cnf配置文件禁用ONLY_FULL_GROUP_BY模式或调整SQL语句,确保查询列与GROUP BY列一致或使用聚合函数。对于SQL修改的具体实现,可以将未分组的列与聚合函数结合使用。
摘要由CSDN通过智能技术生成

查询“user”表每个性别的最大年龄的基本信息

b837b382d44b16c71feab59ccf2ffb8b.png

我的第一反应是写出了下面这个sql

select * from user group by sex order by age desc

但是被mysql 版本号为“5.7.20“无情的抛出了异常:

[Err] 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.user.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

大概就是说,group by 之外的属性不能查询,除非有聚合函数

我就在网上查看了一下先人们的解决方法

mysql从5.7以后,默认开启group by的严格模式。如果错误号是1055,处理方式可以2种,

1)更改my.cnf(windows下是my.ini)中的sql_mode参数,去掉:only_full_group_by。

2)修改SQL语句,查询的列和group by的列,需要一致(主键可以忽略、用了函数的列可以忽略)

group by 分组后,你分组的列必须要在select 后面,并且没有被分组的列不能在select后面,但后select后面可以接聚合函数 count(*)等, 举个例子:

select a,b from A group by a ;这个对 a分组,所有查询到a每一行都是唯一的,但是a相同的情况下,b可能会有多个,这个a只有一条记录,但是b有多条记录,这个结果是没法显示的, 例子如下

所有只能写成

select a,b from A group by a,b;

或者

select a,count(b) from A group by a;

解决方法:

修改配置文件

换mysql版本(亲测5.5版本是可以的)

想办法修改sql语句(也就感觉这个实用点了,但是要怎么改呢,这个又难住我了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值