mysql查询出现In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'zhibo.a.id';

出现问题:

Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: In aggregated query without GROUP BY,expression #2 of SELECT list contains nonaggregated column ‘pay.t.type‘; this is incompatible with sql_mode=only_full_group_by

出现原因:

在MySQL5.7.5后,默认开启了ONLY_FULL_GROUP_BY,所以导致了之前的一些SQL无法正常执行,其实,是我们的SQL不规范造成的,因为group by 之后,返回的一些数据是不确定的,所以才会出现这个错误。

解决方案:

1.修改SQL,因为出现这个问题,基本都是因为这个问题造成的,不确定返回字段可以使用ANY_VALUE(column_name)。

2.关闭ONLY_FULL_GROUP_BY,我的是Linux环境,我就说一下Linux的解决步骤:

  ①、登录进入MySQL,linux登录的:mysql -u username -p ,然后输入密码,输入SQL:show variables like ‘%sql_mode‘;

  

  ②、编辑my.cnf文件,文件地址一般在:/etc/my.cnf,/etc/mysql/my.cnf,

    找到sql-mode的位置,去掉ONLY_FULL_GROUP_BY,然后重启MySQL;有的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]下面,我就是加入到其他地方,重启后也不生效,具体的如下图:

  

  ③、修改成功后重启MySQL服务,service mysql restart,重启好后,再登录mysql,

    输入SQL:show variables like ‘%sql_mode‘; 如果没有ONLY_FULL_GROUP_BY,就说明已经成功了。

  

  

mysql查询出现In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'zhibo.a.id';

原文地址:https://www.cnblogs.com/tygtyg/p/9895481.html

时间: 2024-08-29 19:49:55

mysql查询出现In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'zhibo.a.id';的相关文章

MySQL查询子句(group by,limit,union,order by等)

Order by 按照字段值进行排序,默认升序(asc).校对规则决定排序关系. order by 字段 升序|降序(asc|desc), Order by允许多字段排序. 指的是,先按第一个字段排序,如果不能区分,才使用第二个字段,以此类推. create table test( id int primary key not null auto_increment, name varchar(10), group_id int ); insert into test values(null,'

RDS for MySQL查询缓存 (Query Cache) 的设置和使用

https://help.aliyun.com/knowledge_detail/41717.html?spm=5176.7841698.2.11.aCvOXJ RDS for MySQL查询缓存 (Query Cache) 的设置和使用 功能和适用范围 原理 限制 设置 验证效果 1. 功能和适用范围 功能: 降低 CPU 使用率 降低 IOPS 使用率(某些情况下) 减少查询响应时间,提高系统的吞吐量 适用范围: 表数据修改不频繁.数据较静态 查询(Select)重复度高 查询结果集小于 1

mysqldumpslow 分析slow query日志和explain分析mysql查询结构

mysqldumpslow的使用:比如我们要查询按时间返回前5条日志信息,格式如下:mysqldumpslow -s t -t 5 /var/log/mysql/slowquery_20180303.log 参数说明:-s:排序方式 按锁的时间l.返回的记录数r.查询的时间t.记录的次数c,倒序的话可以加r-t:查询前多少条记录-g:支持正则表达式,以及忽略大小写 顺便说下explainexplain用来分析mysql查询结构的主要关注四个参数值:type.key.rows.extras访问类型

MySQL 查询语句优化思路

query 语句的优化思路和原则主要提现在以下几个方面:1. 优化更需要优化的Query:2. 定位优化对象的性能瓶颈:3. 明确的优化目标:4. 从 Explain 入手:5. 多使用profile6. 永远用小结果集驱动大的结果集:7. 尽可能在索引中完成排序:8. 只取出自己需要的Columns:9. 仅仅使用最有效的过滤条件:10. 尽可能避免复杂的Join和子查询 关于explain 用法:explain select * from tables1 where 1 ... 先看一下在

mysql查询流程

转自:http://www.cnblogs.com/annsshadow/p/5037667.html 前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一下其中的知识. 一.MySQL架构总览: 架构最好看图,再配上必要的说明文字. 下图根据参考书籍中一图为原本,再在其上添加上了自己的理解. 从上图中我们可以看到,整个架构分为两层,上层是MySQLD的

MySQL查询大小写是否敏感问题分析

mysql数据库在做查询时候,有时候是英文字母大小写敏感的,有时候又不是的,主要是由mysql的字符校验规则的设置决定的,通常默认是不支持的大小写字母敏感的.  1. 什么是字符集和校验规则? 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则.任何一个给定的字符集至少有一个校对规则,它可能有几个校对规则.要想列出一个字符集的校对规则,使用SHOW COLLATION语句. 校对规则一般有这些特征: 两个不同的字符集不能有相同的校对规则. 每个字符集有一个默认校对规则.例如,ut

mysql查询语句优化工具

把这个profiling功能打开,可以查看sql查询语句的整个过程中各种资源的消耗情况. mysql> show profiles;+----------+------------+---------------------------------+| Query_ID | Duration   | Query                           |+----------+------------+---------------------------------+|      

mysql查询详解

--以下内容摘自马哥教育课堂 SELECT SELECT查询流程 客户端SELECT语句<==>查询缓存--缓存未命中-->解释器--预处理器-->解析树(多条访问路径) -->查询优化器(择优选择路径)-->查询执行计划-->查询执行引擎--API调用存储引擎--数据-->查询执行引擎返回结果并使用哈希储存于查询缓存 select now();这是无需查询缓存的,查询当前缓存 多台MYSQL服务器,如何提高MYSQL的缓存命中率 前端程序可使用一致性哈希算

mysql查询更新时的锁表机制分析(只介绍了MYISAM)

为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制. 一.概述 MySQL有三种锁的级别:页级.表级.行级.MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking):BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁:InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁. MySQL这3种锁的特性可大致归纳如下: 表级锁:开销小,加