mysql-groupby报错

mysql groupBy问题

1
2
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xxx' which is not 
functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

解决办法一

  1. 查询 sql_mode

    1
    select @@global.sql_mode;

    结果如下

    1
    ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    只需要将上面的 ONLY_FULL_GROUP_BY 去掉就行

    使用如下语句

    1
    set @@global.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

    这种方法存在的问题

    1. 在有些时候不生效
    2. mysql重启之后配置失效

解决办法二

打开 mysql配置文件 my.cnf,在最下面添加

1
2
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

使用这种方法会永久解决上面的报错问题

P.S. 如果 mysql 使用的是 docker

在进入容器内部

1
docker exec -it my-mysql /bin/bash

之后可能出现没有 vi/vim 工具导致无法修改配置文件

在此情况下首先执行

1
apt-get update

然后安装 vim

1
apt-get install vim
作者

Bruce Liu

发布于

2020-09-16

更新于

2022-11-12

许可协议

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

评论

You forgot to set the shortname for Disqus. Please set it in _config.yml.