查询“user”表每个性别的最大年龄的基本信息
我的第一反应是写出了下面这个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语句(也就感觉这个实用点了,但是要怎么改呢,这个又难住我了)