IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL数据表查询group by的用法及distinct区别 -> 正文阅读

[大数据]MySQL数据表查询group by的用法及distinct区别

分组聚合

最常用的场景就是分组聚合,由多条变成比较少记录的过程是分组聚合,既然需要分组,就要考虑使用哪个字段进行分组最好,一般来说,主键才是group by 后面的分组字段

主键(PRIMARY KEY)的完整称呼是“主键约束”,分为单字段主键和多字段联合主键,这两种主键约束都可以创建、修改和删除
使用主键应注意以下几点:

  • 每个表只能定义一个主键。
  • 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主- 键值的两行数据。这是唯一性原则。
  • 一个字段名只能在联合主键字段表中出现一次。
  • 联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。这是最小化原则。

分组聚合的过程:

如:select id, name, avg(score) as s from table group by id;

1、先分组

在这里插入图片描述

2、后聚合

聚合是由多变一的过程,就是每一个组变成一条记录,有聚合的取聚合的结果,没有聚合的取每个组的第一条记录,avg(score) 取每个组的成绩的平均成绩(avg是平均函数,属于聚合函数),id没有聚合,就取每个组的第一条记录,又因为每个组的id都一样,所以取一个是合理的。

在这里插入图片描述

only_full_group_by模式

MySql 5.7以后的版本,默认情况下,sql_mode里默认打开only_full_group_by模式,这个打开后,对Sql的语法检查就会很严格,如果没有使用聚合函数,使用了group by但是查询的列没有出现在group by后面就会出现这个问题。

SELECT NAME,SEX FROM TABLE GROUP BY SEX;
-- 以sex字段进行分组查询会出现报错
SELECT NAME,SEX FROM TABLE GROUP BY NAME,SEX;
-- 这样就不会报错,因为使用GROUP BY不规范

其实这样挺好的,似的SQL的写法更规范,当然也可以进行解决,规避这种错误
参考:

  • https://www.cnblogs.com/zenghi-home/p/13397649.html
  • https://www.jianshu.com/p/7f532985ff39
  • https://zhuanlan.zhihu.com/p/296449901

DISTINCT 与 GROUP BY 比较

  • distinct支持单列、多列的去重方式,单纯的去重操作使用distinct,速度是快于group by的,
  • 多列的去重则是根据指定的去重的列信息来进行,即只有所有指定的列信息都相同,才会被认为是重复的信息,所以使用distinct时要注意多列问题,只能使用group by
  • group by 在多列的去重方面使用的较多,但其主要还是会用来进行聚合统计的
  • 性能:数据量比较大的表,关联字段都会加索引,一般来说,不管是加不加索引group by 都比distinct 快

参考:

  • https://www.jb51.net/article/78000.htm
  • https://www.jb51.net/article/77999.htm
  • https://www.jb51.net/article/74556.htm
  • https://www.jb51.net/article/182395.htm
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:59:51  更:2021-12-28 23:00:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:56:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码