返回顶部
首页 > 资讯 > 数据库 >MySQL8.0新特性--Group by
  • 389
分享到

MySQL8.0新特性--Group by

2024-04-02 19:04:59 389人浏览 独家记忆
摘要

Group by  语句用于结合聚合函数(如count,sum,avg,max,min),根据一个或多个列对结果集进行分组。(1)去掉重复值:根据group by后面的关键字只显示一行结果;(2)

Group by  语句用于结合聚合函数(如count,sum,avg,max,min),根据一个或多个列对结果集进行分组。

(1)去掉重复值:根据group by后面的关键字只显示一行结果;

(2)Mysql5.7默认开启参数ONLY_FULL_GROUP_BY,表示完全group by,即select后面跟的列group by后面也必须有,但是group by后面跟的列,select后面不一定需要出现; 

mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.13    |
+-----------+
1 row in set (0.00 sec)

mysql> show variables like '%sql_mode%';
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> select * from t_group;
+--------+---------+------------+------------+
| emp_no | dept_no | from_date  | to_date    |
+--------+---------+------------+------------+
|  22744 | d006    | 1986-12-01 | 9999-01-01 |
|  24007 | d005    | 1986-12-01 | 9999-01-01 |
|  30970 | d005    | 1986-12-01 | 2017-03-29 |
|  31112 | d002    | 1986-12-01 | 1993-12-10 |
|  40983 | d005    | 1986-12-01 | 9999-01-01 |
|  46554 | d008    | 1986-12-01 | 1992-05-27 |
|  48317 | d008    | 1986-12-01 | 1989-01-11 |
|  49667 | d007    | 1986-12-01 | 9999-01-01 |
|  50449 | d005    | 1986-12-01 | 9999-01-01 |
|  10004 | d004    | 1986-12-01 | 9999-01-01 |
+--------+---------+------------+------------+
10 rows in set (0.00 sec)

mysql> select dept_no,count(*) from t_group group by dept_no;
+---------+----------+
| dept_no | count(*) |
+---------+----------+
| d006    |        1 |
| d005    |        4 |
| d002    |        1 |
| d008    |        2 |
| d007    |        1 |
| d004    |        1 |
+---------+----------+
6 rows in set (0.00 sec)

mysql> select dept_no,emp_no,count(*) from t_group group by dept_no;
ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'employees.t_group.emp_no' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

关闭ONLY_FULL_GROUP_BY参数后,不报错,但是结果是不完全group by;
mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected (0.01 sec)

mysql> select dept_no,emp_no,count(*) from t_group group by dept_no;
+---------+--------+----------+
| dept_no | emp_no | count(*) |
+---------+--------+----------+
| d006    |  22744 |        1 |
| d005    |  24007 |        4 |
| d002    |  31112 |        1 |
| d008    |  46554 |        2 |
| d007    |  49667 |        1 |
| d004    |  10004 |        1 |
+---------+--------+----------+
6 rows in set (0.00 sec)


(3)mysql5.7group by 默认还有排序功能,8.0默认只分组不排序,需要加order by才排序,这点可以从执行结果是否有Using filesort来判断

mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.13    |
+-----------+
1 row in set (0.00 sec)

mysql> select dept_no,count(*) from t_group group by dept_no;
+---------+----------+
| dept_no | count(*) |
+---------+----------+
| d006    |        1 |
| d005    |        4 |
| d002    |        1 |
| d008    |        2 |
| d007    |        1 |
| d004    |        1 |
+---------+----------+
6 rows in set (0.00 sec)

mysql> desc select dept_no,count(*) from t_group group by dept_no;
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-----------------+
| id | select_type | table   | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra           |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-----------------+
|  1 | SIMPLE      | t_group | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   10 |   100.00 | Using temporary |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-----------------+
1 row in set, 1 warning (0.00 sec)


root@localhost [testdb]>select @@version;
+------------+
| @@version  |
+------------+
| 5.7.16-log |
+------------+
1 row in set (0.00 sec)

root@localhost [testdb]>select dept_no,count(*) from t_group group by dept_no;
+---------+----------+
| dept_no | count(*) |
+---------+----------+
| d002    |        1 |
| d004    |        1 |
| d005    |        4 |
| d006    |        1 |
| d007    |        1 |
| d008    |        2 |
+---------+----------+
6 rows in set (0.00 sec)

root@localhost [testdb]>desc select dept_no,count(*) from t_group group by dept_no;
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+
| id | select_type | table   | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                           |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+
|  1 | SIMPLE      | t_group | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   10 |   100.00 | Using temporary; Using filesort |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+
1 row in set, 1 warning (0.00 sec)


(4) group by是否能排序会直接影响分页查询结果

8.0.13版本
mysql> select dept_no,count(*) from t_group group by dept_no limit 1;
+---------+----------+
| dept_no | count(*) |
+---------+----------+
| d006    |        1 |
+---------+----------+
1 row in set (0.01 sec)

5.7.16版本:
root@localhost [testdb]>select dept_no,count(*) from t_group group by dept_no limit 1;
+---------+----------+
| dept_no | count(*) |
+---------+----------+
| d002    |        1 |
+---------+----------+
1 row in set (0.00 sec)


参考链接

8.2.1.15 GROUP BY Optimization

MySQL 5.7有关group by说明的片段如下:

In MySQL, GROUP BY is used for sorting, so the server may also apply ORDER BY optimizations to grouping. However, relying on implicit or explicit GROUP BY sorting is deprecated. See Section 8.2.1.14, “ORDER BY Optimization”.


您可能感兴趣的文档:

--结束END--

本文标题: MySQL8.0新特性--Group by

本文链接: https://lsjlt.com/news/45567.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL8.0新特性--Group by
    Group by  语句用于结合聚合函数(如count,sum,avg,max,min),根据一个或多个列对结果集进行分组。(1)去掉重复值:根据group by后面的关键字只显示一行结果;(2)...
    99+
    2024-04-02
  • MySQL8.0 新特性 Hash Join
    概述&背景 MySQL一直被人诟病没有实现HashJoin,最新发布的8.0.18已经带上了这个功能,令人欣喜。有时候在想,MySQL为什么一直不支持HashJoin呢?我想可能是因为MySQL多用于简单的OLTP场景,并且在互联网应用居多...
    99+
    2014-06-11
    MySQL8.0 新特性 Hash Join
  • MySQL8.0其他新特性
    MySQL8.0其他新特性 MySQL8.0新特性概述 MySQL8.0新增特性 MySQL8.0移除的旧特性 新特性1:窗口函数 窗口函数的分类 MySQL8.0版本开始支持窗口函数,窗口函数的作用类似于在查询过程中对数据...
    99+
    2014-10-30
    MySQL8.0其他新特性
  • MYSQL8.0 group by 无法执行问题
    查看:SELECT @@GLOBAL.sql_mode;  #将前面ONLY_FULL_GROUP_BY删除 set global sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_...
    99+
    2021-08-26
    MYSQL8.0 group by 无法执行问题
  • MySQL8.0新特性有哪些
    这篇文章给大家分享的是有关MySQL8.0新特性有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。1、 默认字符集由latin1变为utf8mb4在8.0版本之前,默认字符集为...
    99+
    2024-04-02
  • MySQL8.0有什么新特性
    本篇内容介绍了“MySQL8.0有什么新特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、MySQL ...
    99+
    2024-04-02
  • MySQL8.0新特性是什么
    本篇内容主要讲解“MySQL8.0新特性是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL8.0新特性是什么”吧!1. 默认字符集由latin1变为...
    99+
    2024-04-02
  • MySQL8.0的新特性是什么
    本篇文章给大家分享的是有关MySQL8.0的新特性是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。大量使用 class 重构代码明面上: ...
    99+
    2024-04-02
  • MySQL8.0的一些新特性介绍
    本文主要给大家简单讲讲MySQL8.0的一些新特性,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望MySQL8.0的一些新特性这篇文章可以给大家带来一些实际帮...
    99+
    2024-04-02
  • mysql8.0新特性的坑有哪些
    这篇文章主要介绍mysql8.0新特性的坑有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、创建用户和授权在mysql8.0创建用户和授权和之前不太一样了,其实严格上来讲,也不...
    99+
    2024-04-02
  • MySQL8.0里GROUP BY有变化的示例分析
    这篇文章的内容主要围绕MySQL8.0里GROUP BY有变化的示例分析进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收...
    99+
    2024-04-02
  • MySQL8.0优化器新特性是什么
    这篇文章主要介绍“MySQL8.0优化器新特性是什么”,在日常操作中,相信很多人在MySQL8.0优化器新特性是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL8...
    99+
    2024-04-02
  • MySQL8.0的主要新特性有哪些
    这篇文章主要介绍“MySQL8.0的主要新特性有哪些”,在日常操作中,相信很多人在MySQL8.0的主要新特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL8.0的主要新特性有哪些”的疑惑有所...
    99+
    2023-06-19
  • MySQL8.0新特性——支持原子DDL语句
       MySQL 8.0开始支持原子数据定义语言(DDL)语句。此功能称为原子DDL。原子DDL语句将与DDL操作关联的数据字典更新,存储引擎操作和二进制日志写入组合到单个原子事务中。即...
    99+
    2024-04-02
  • MySQL8.0 GA版本的新特性有哪些
    这篇文章将为大家详细讲解有关MySQL8.0 GA版本的新特性有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。嗦一嗦 MySQL 8.0的新特性 Wha...
    99+
    2024-04-02
  • Oracle12c新特性TABLE ACCESS BY INDEX ROWID BATCHED
    Oracle 12c中新增通过ROWID BATCHED访问数据块的方式,优化原来使用单个rowid进行数据块访问方式带来的资源消耗及对数据块的扫描次数,即TABLE ACCESS BY INDEX R...
    99+
    2024-04-02
  • MySQL8.0新特性中什么是CTE语法支持
    这篇文章将为大家详细讲解有关MySQL8.0新特性中什么是CTE语法支持,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。CTE(common table ex...
    99+
    2024-04-02
  • Oracle 12c新特性之——TABLE ACCESS BY INDEX ROWID BATCHED
    Oracle12c开始,我们在获取SQL语句的执行计划时,也会经常看到"TABLE ACCESS BY INDEX ROWID BATCHED"操作,那么,这个操作到底是什么意思呢?有什么作用呢?下面我...
    99+
    2024-04-02
  • MySQL8.0中你必须要知道的索引新特性
    目录前言支持索引降序排序降序索引说明降序索引好处支持索引的隐藏隐藏索引的说明隐藏索引的好处总结前言 mysql中的索引可以为提高我们的查询效率,相比较于低版本, MySQL 8.0中针对索引做了不少的优化,本文主要分享下...
    99+
    2024-04-02
  • 解析MySQL8.0新特性——事务性数据字典与原子DDL
    前言 事务性数据字典与原子DDL,是MySQL 8.0推出的两个非常重要的新特性,之所以将这两个新特性放在一起,是因为两者密切相关,事务性数据字典是前提,原子DDL是一个重要应用场景。 MySQL 8.0之前的数据字...
    99+
    2022-05-27
    MySQL 事务性数据字典 MySQL 原子DDL MySQL8.0 新特性
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作