mysql使用DISTINCT函数,报错ERROR 1140 (42000): In aggregated query without GROUP BY.....

现象:

执行sql SELECT COUNT(DISTINCT ( colum1 )),colum2, colum3  FROM table;报错ERROR 1140 (42000): In aggregated query without GROUP BY.....

原因:

mysql的sql_mode默认开启了only_full_group_by模式,导致mysql的sql的group by 规则跟Oracle类似了,去掉only_full_group_by模式就可以了

解决:

1.查看sql_mode

show variables like '%sql_mode';  (下面是执行结果)

show session variables like '%sql_mode%';  (下面是执行结果)

show global variables like '%sql_mode%';  (下面是执行结果)

能看到查询出来的value中确实有ONLY_FULL_GROUP_BY

2.修改sql_mode

set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

sql_model后面的值就是上面查询出来的值去掉ONLY_FULL_GROUP_BY

3.再次查询

show variables like '%sql_mode';  (下面是结果)

 

好了,现在已经去掉了ONLY_FULL_GROUP_BY,就不会报错了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值