• 解决ONLY_FULL_GROUP_BY的问题


    报错 在mysql 5.7版本下可能会报如下错误

    Error Code: 1055. Expression #3 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

    原因 是在5.7下mysql的model默认为

    ONLY_FULL_GROUP_BY

    含义 sql中select后面的字段必须出现在group by后面,或者被聚合函数包裹,不然会抛出上面的错误 如以下sql

    select A.column1, A.column2 from table as A group by column1 //会因为ONLY_FULL_GROUP_BY的缘故抛出上面错误
    1
    问题解决
    思路一
    既然是这个模式限制的问题 我们可以修改该模式,找到配置文件 修改配置即可。

    vim /etc/mysql/my.cnf
    1
    文件名如上所示,但是地址可能得看具体环境了

    [mysql]
    #设置mysql客户端默认字符集
    default-character-set=utf8 
    [mysqld]
    #设置3306端口
    port = 3306
    #设置mysql的安装目录
    basedir=%MYSQL_HOME%
    #允许最大连接数
    max_connections=200
    #服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8
    #创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    #设置模式
    sql_mode =STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    
    datadir = D:mysql-5.7.27-winx64data
    

    注意这里的sql_mode 是配置在[mysqld]下面的
    然后就是重启mysql服务

    思路二
    我们得承认这个模式是很有意义的。而我们又想实现如下sql的效果

    select A.column1, A.column2 from table as A group by column1

    首先我们得理解我们写的上面的sql的含义 按column1进行分组 那么结果就是这个组内的cloumn1都是相同的,但是column2却没有限制,也就是说可能相同 也可能不同,那么数据库不知道column2该返回什么值给你

    那么我们有两种方案

    在group by后面追加上column2就可以了,意义相当于按照 由column1和column2拼接成的联合字段进行分组
    select A.column1, A.column2 from table as A group by column1 , column2
    1
    或者在内查询里只查询分组的字段, 各位可以参考如下形式
    SELECT A.column1, A.column2 FROM TABLE A JOIN ( SELECT max(id) id, column1 FROM TABLE b GROUP BY column_1 )

    不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!
  • 相关阅读:
    Unity Technologies-提供全面的技术支持服务
    Unity 大中华区核心业务
    帕斯卡(pascal)命名法:
    骆驼命名法
    匈牙利命名法
    软件分类
    模型规范
    命名规范
    22. Generate Parentheses 生成括号
    421. Maximum XOR of Two Numbers in an Array 数组中两个数的最大异或
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/14893417.html
Copyright © 2020-2023  润新知