1、group by中的分组字段和select后的字段要保持一致;

2、通常group by和聚合函数一起使用,但也可以不包含聚合函数,根据业务需求决定;

3、常用的聚合函数有max()、min()、avg()、sum()、count()等。

这个错误发生在mysql 5.7.5 版本及以上版本会出现的问题:
mysql 5.7.5版本以上默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准"。
很多从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序。

解决方案一:使用函数ANY_VALUE()包含报错字段
SELECT ANY_VALUE(ID),USER_ID,ANY_VALUE(problems),ANY_VALUE(last_updated_date) FROM  t_iov_help_feedback GROUP BY USER_ID;

解决方案二:通过sql语句暂时性修改sql_mode
SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
上面是改变了全局sql_mode,对于新建的数据库有效。对于已存在的数据库,则需要在对应的数据库下执行:
         SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

解决方案三:通过配置文件永久修改sql_mode
mysql安装在服务器上和安装在本地,修改配置文件的方式有点区别。
编辑my.cnf文件
文件地址一般在:/etc/my.cnf,/etc/mysql/my.cnf

找到sql-mode的位置,去掉ONLY_FULL_GROUP_BY
然后重启MySQL;service mysql restart

有的my.cnf中可能没有sql-mode,需要追加:
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

注意要加入到[mysqld]下面,如加入到其他地方,重启后也不生效

对于docker 下安装的mysql, 重启容器,数据会丢失的 。
最常见的数据持久化方式是使用Docker数据卷或者将主机的文件夹挂载到容器中。这样,即使容器被终止或重启,卷中的数据与挂载的文件夹中的数据会保持不变,确保数据的持久化。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐