博客
关于我
MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案
阅读量:790 次
发布时间:2023-02-13

本文共 1754 字,大约阅读时间需要 5 分钟。

项目场景

在处理数据库数据时,可能会遇到重复数据的问题。这时候,GROUP BY语句是非常有用的工具,因为它可以帮助我们将数据进行分组,并只保留一条记录来展示。然而,在MySQL的高版本中,使用GROUP BY时需要注意一些限制条件,这可能会导致错误。

问题描述

表结构

CREATE TABLE `t_iov_help_feedback` (    `ID` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',    `USER_ID` INT(255) DEFAULT NULL COMMENT '用户ID',    `problems` VARCHAR(255) DEFAULT NULL COMMENT '问题描述',    `last_updated_date` DATETIME DEFAULT NULL COMMENT '最后更新时间') ENGINE=INNODB DEFAULT CHARSET=utf8;

表数据

(此处为图片描述,实际内容已被替换)

SQL 语句

1. 查询 GROUP BY 的字段(正常)
SELECT USER_ID FROM t_iov_help_feedback GROUP BY USER_ID;
2. 查询非 GROUP BY 的字段(报错)
SELECT MAX(ID), USER_ID FROM t_iov_help_feedback GROUP BY USER_ID;

分析与解决方案

在尝试使用 GROUP BY 语句时,如果在 SELECT 列表中包含不属于 GROUP BY 的字段,MySQL 高版本会抛出错误。这是因为 GROUP BY 模式为 only_full_group_by 时,所有 SELECT 列表中的字段都必须属于 GROUP BY 列表或是聚合函数。

错误信息解读

错误信息提示:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column '数据库名.表名.字段名' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

这意味着,在 SELECT 列表中使用了不属于 GROUP BY 的字段,而该字段也不是聚合函数或计算字段。

解决步骤

  • 确保 GROUP BY 中包含所有 SELECT 中的字段:

    如果需要在 SELECT 中使用非聚合字段,则必须包含这些字段在 GROUP BY 中。例如:

    SELECT USER_ID, MAX(ID) FROM t_iov_help_feedback GROUP BY USER_ID;
  • 使用聚合函数:

    如果需要对某个字段进行聚合操作,可以使用聚合函数如 MAXMINSUM 等。例如:

    SELECT USER_ID, MAX(last_updated_date) FROM t_iov_help_feedback GROUP BY USER_ID;
  • 检查字段依赖关系:

    确保 GROUP BY 中的字段与 SELECT 列表中的字段有依赖关系,或者不需要使用非聚合字段。

  • 示例查询

    假设需要获取每个 USER_ID 对应的最新记录,可以使用以下查询:

    SELECT USER_ID, MAX(last_updated_date) AS latest_dateFROM t_iov_help_feedbackGROUP BY USER_ID;

    这样,latest_date 是聚合函数,符合 GROUP BY 的要求。

    总结

    在使用 GROUP BY 时,确保所有 SELECT 列表中的字段要么在 GROUP BY 中,要么是聚合函数。避免在 SELECT 中使用不属于 GROUP BY 的字段,否则会导致错误。通过正确使用 GROUP BY 和聚合函数,可以有效地处理数据库中的重复数据,并按需求展示所需的信息。

    转载地址:http://jqdfk.baihongyu.com/

    你可能感兴趣的文章
    MySQL数据库 范式
    查看>>
    Mysql数据库B-Tree索引
    查看>>
    mysql数据库io空闲_mysql数据库磁盘io高的排查
    查看>>
    mysql数据库root密码忘记,查看或修改的解决方法
    查看>>
    MySQL数据库SQL注入靶场sqli通关实战(附靶场安装包)
    查看>>
    MYSQL数据库下载安装(Windows版本)
    查看>>
    MySQL数据库与Informix:能否创建同名表?
    查看>>
    mysql数据库中的数据如何加密呢?mysql8.0自带新特性
    查看>>
    MySQL数据库优化
    查看>>
    Mysql数据库函数contac_函数:函数删除操作语法&使用例——《mysql 从入门到内卷再到入土》...
    查看>>
    mysql数据库命令备份还原
    查看>>
    mysql数据库基础教程
    查看>>
    MySQL数据库备份
    查看>>
    mysql数据库备份与恢复
    查看>>
    MySQL数据库备份实战
    查看>>
    Mysql数据库备份的问题:mysqldump: Got error: 1049: Unknown_无需整理
    查看>>
    mysql数据库如何重置密码是多少钱_MySQL数据库忘记root密码如何重置修改
    查看>>
    MySQL数据库安装配置与常用命令
    查看>>
    MySQL数据库实现主从同步数据
    查看>>
    mysql数据库导入导出_windows系统以及linux系统下的操作---linux工作笔记042
    查看>>