博客
关于我
MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案
阅读量:801 次
发布时间: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/

    你可能感兴趣的文章
    Nginx服务器基本配置
    查看>>
    Nginx服务器的安装
    查看>>
    Nginx标准配置文件(包括反向代理、大文件上传、Https证书配置、文件预览等)
    查看>>
    Nginx模块 ngx_http_limit_conn_module 限制连接数
    查看>>
    Nginx模块 ngx_http_limit_req_module 限制请求速率
    查看>>
    nginx添加允许跨域header头
    查看>>
    nginx添加模块与https支持
    查看>>
    nginx状态监控
    查看>>
    Nginx用户认证
    查看>>
    Nginx的location匹配规则的关键问题详解
    查看>>
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的使用总结(三)
    查看>>
    Nginx的使用总结(二)
    查看>>
    Nginx的使用总结(四)
    查看>>
    Nginx的可视化神器nginx-gui的下载配置和使用
    查看>>
    nginx的平滑升级方法:
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    Nginx的端口修改问题
    查看>>
    Nginx的配置文件位置以及组成部分结构讲解
    查看>>