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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> ROW_NUMBER 和OVER()分组 -> 正文阅读

[大数据]ROW_NUMBER 和OVER()分组

GroupBy的介绍

在我们使用SQL进行查询的时候经常会用到GroupBy进行分组查询操作

分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。

当对一个列进行分组,因为只会显示该列的一条不重复数据,对于其他列依然是存在多条。

Mysql的严格模式

Mysql处于严格模式(SQL_MODE被设置为 ONLY_FULL_GROUP_BY

如果SQL写成select * from t group by name,就会报错,原因就是因为除了name之前,其他列的数据都不是唯一的,在严格模式会报错。

解决方法

ANY_VALUE()

不过,在严格模式(ONLY_FULL_GROUP_BY)下,依然是想获取聚合列:

SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;

原理就是从分组中,随意获取一个数据,前提也就是你不关心组数据中的不同情况。

主键分组

方法二:如果GROUP BY是主键或者 unique NOT NULL 时是可以查询非聚合的列的,原因是此时分组的key是主键,则每一个分组只有一条数据,因此是可以进行查询非聚合的列的。

关闭严格模式

方法三:关闭严格模式
查看当前sql_model:

查看当前sql_model

SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;

OVER()

OVER()

  1. over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数
  2. over(partition by deptno)按照部门分区
  3. over(partition by deptno order by salary)分组加排序

前置函数演示

用于配合OVER()使用,存在多个可以去使用

OVER()是可以单独使用,包括这些前置函数都是可以的

在这里插入图片描述

ROW_NUMBER()

将针对SELECT语句返回的每一行,从1开始编号,赋予其连续的编号。在查询时应用了一个排序标准后,只有通过编号才能够保证其顺序是一致的,当使用ROW_NUMBER函数时,也需要专门一列用于预先排序以便于进行编号

select * from(select name,class,s,row_number()over(partition by class order by s desc) mm from t2)           where mm=1;

查询结果

因为ROW_NUMBER()会对每一个查询到的数据都给给与个数字标识,我们查询的是给与数字标识为1的

在这里插入图片描述

RANK_NUMBER()

select * from(select name,class,s,rank()over(partition by class order by s desc) mm from t2)           where mm=1;

查询结果

对每一个查询到的数据都给给与个数字标识,对于排序相同的会给出相同的,数字标识

在这里插入图片描述

select name,class,s,rank()over(partition by class order by s desc) mm from t2

查询结果

rank()和dense_rank()可以将所有的都查找出来:
如上可以看到采用rank可以将并列第一名的都查找出来;
rank()和dense_rank()区别:
rank()是跳跃排序,有两个第二名时接下来就是第四名;

在这里插入图片描述

DENSE_RANK()

select name,class,s,dense_rank()over(partition by class order by s desc) mm from t2

在这里插入图片描述

下面还存在很多类似的函数,感兴趣可以了解。我看不下去了卷不动了

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:37:32  更:2022-02-26 11:39:05 
 
开发: 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 11:34:23-

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