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

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

ROW_NUMBER 和OVER()分组相关推荐

  1. 巧用row_number和partition by分组取top数据

    2019独角兽企业重金招聘Python工程师标准>>> 分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系统中取出每个学科前3名的学生.这种查询在SQL Server 20 ...

  2. [转]SQL2005后的ROW_NUMBER()函数的应用

    SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单 分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系 ...

  3. 窗口分析函数_7_生成指定的分组序号

    生成指定的分组序号 需求描述 需求:将EMP表里的部门编号为20的SAL字段按照由高到低排序后分为4组. 解决方法:通过ntile OVER()来完成. 注: 数据库数据集SQL脚本详见如下链接地址 ...

  4. ROW_NUMBER、RANK()、DENSE_RANK()和OVER的使用

    /*以FoodPrice列排序并显示排序后的行号*/ SELECT ROW_NUMBER() OVER(ORDER BY FoodPrice DESC) AS RowId,* FROM dbo.Foo ...

  5. MYSQL实现排名函数RANK,DENSE_RANK和ROW_NUMBER

    文章目录 1. 排名分类 1.1 区别RANK,DENSE_RANK和ROW_NUMBER 1.2 分组排名 2. 准备数据 3. 不分组排名 3.1 连续排名 3.2 并列跳跃排名 3.3 并列连续 ...

  6. Spark SQL 开窗函数row_number的使用

    Spark SQL 开窗函数row_number的使用 窗口函数 row_number即为分组取topN 参考文本:                   型号                      ...

  7. 如何去重一个Oracle表

    如何去重一个oracle表, 这是数据仓库中经常要碰到的问题, 多数ETL工具都提供这样的功能, 如果要求用一条SQL, 该如何写呢? 如果是完全重复的记录,即所有字段均重复的记录, 去重很简单, d ...

  8. SQL取出每个产品的Top n 条记录

    1.创建表结构和数据 创建表和数据 Create Table Product --产品表 ( ProductID Int Identity(1,1) Primary key, --产品ID Produ ...

  9. hive substr函数_数据分析工具篇——HQL函数及逻辑

    本篇文章我们梳理一下hive常用的函数,对于hive而言,常用的函数并不是特别多,往往记住关键几个,就可以解决80%的问题,这也是大家喜欢hive的原因,那么,常用的函数有哪些呢? 时间函数 1)时间 ...

最新文章

  1. 零起点学算法02——输出简单的句子
  2. linux学 java_[操作系统]Linux学习第二步(Java环境安装)
  3. python在财务中的应用实训报告-实践应用|PyQt5制作雪球网股票数据爬虫工具
  4. 设计模式的征途—21.迭代器(Iterator)模式
  5. 程序猿的节日:1024,今天祝愿全球所有程序猿们、IT精英们节日快乐!——我在上海写代码
  6. 如何为云原生应用带来稳定高效的部署能力?
  7. 计算机硬件系统设计mooc,计算机硬件系统设计MOOC答案
  8. [Python人工智能] 三十三.Bert模型 (2)keras-bert库构建Bert模型实现文本分类
  9. 如何创建URL Mashup并插入到SAP Cloud for Customer标准页面里
  10. linux qt 添加动态链接库_Qt 连接MySql数据库
  11. linux 文件格式压缩
  12. keil 在多字节的目标代码页中 没有此unicode_Go语言之父带你重新认识字符串、字节、rune和字符
  13. Google Play市场考察报告-2
  14. 按层次遍历二叉树_LeetCode | 102.二叉树的层次遍历
  15. MySQL数据库优化之索引优化
  16. 基于Spark的电影推荐系统(推荐系统~3)
  17. 小米路由器3 mysql_小米路由器3 opkg安装
  18. 找软件完全安装手册——【19年3月】各行业软件大全\系统安装、系统装机、软件安装、各种完全手册更新中(来自第一设计群)
  19. 如何更换安装鸿蒙系统,华为鸿蒙系统2.0如何进行安装?鸿蒙系统2.0安装方法详细介绍...
  20. 2022年版中国碳化硅(SiC)市场深度调研与投资可行性分析报告

热门文章

  1. Python pandas数据分列,分割符号固定宽度
  2. 201621123031 《Java程序设计》第4周学习总结
  3. 【第三趴】uni-app页面搭建与路由配置(了解工程目录结构、学会搭建页面、配置路由并成功运行)
  4. 莫尔斯编码的c语言实现,C程序-蓝桥-摩尔斯电码
  5. curl php 模拟来源_PHP cURL实现模拟登录与采集使用方法详解教程
  6. Unity中的Object和object的区别
  7. web SPA 移动端手机H5项目适配(vw+postcss)
  8. openwrt下有线网设置详细过程
  9. Python入门---顺序与选择结构
  10. 云计算机平台 显示器,云桌面