首页 > 数据库 >关于 sql 中的 over() 函数

关于 sql 中的 over() 函数

时间:2022-10-12 18:55:26浏览次数:77  
标签:函数 over rank score sql rn class row

关于sql中的 row_number()、over()、rank()、dense_rank() 函数,还是挺常见的,而且看起来高级。

萌新理解

另一种聚合函数,不需要绑定 group by 就能把聚合和非聚合的函数展示在一起。真香。
设存在 t 表数据如下:

name class score
a 1 44
b 1 17
c 1 23
d 2 29
e 2 19

求每个班成绩排序:

select * ,row_number() over (partition by class order by score) rn from t;
name class score rn
a 1 17 1
b 1 23 2
c 1 44 3
d 2 19 1
e 2 29 2

其中:
row_number()    —— 生成行号
partition by class  —— 根据 class 分组
order by score    —— 根据 score 排序,默认升序
over()        —— 定义规则
rn          —— as rn

如果存在相同分数,row_number()也一定要分个高下的。这时该怎么办呢?

select * ,rank() over (partition by class order by socre desc) rn from t;

然后这里的 rank() 是跳跃排序,获取的rn不连续。
如当同时存在两个100分的第1名时,顺位下一个99分则会获得第3名。
如果需要连续排序,则需要使用 dense_rank() 。

然而 over() 并非同 row_number()、rank() 锁死的,他还可以搭配于其他函数。

select * ,sum(score) over (partition by class order by socre desc) s from t;
name class score s
a 1 17 84
b 1 23 84
c 1 44 84
d 2 19 48
e 2 29 48

那你sum()都行,我avg()不乐意了,我们也得行!

求大于平均分的数据:

select *
from ( select * ,avg(score) over (partition by class) avgr 
       from t )
where score > avgr;

参考文章:

https://blog.csdn.net/zimiao552147572/article/details/88427210
https://blog.csdn.net/yilulvxing/article/details/85098273

标签:函数,over,rank,score,sql,rn,class,row
From: https://www.cnblogs.com/thx2199/p/16785605.html

相关文章

  • 递归函数
    一、递归函数函数的递归调用函数在运行过程中,直接或间接地调用了自身。最大递归深度:python解释器添加的安全措施官网表示:python默认最大递归深度为1000次,我们在测试的......
  • mysql数据库新增用户只有读写权限
    CREATEUSER'pcms'@'%'IDENTIFIEDBY'123456';  --创建用户pcms,密码为123456GRANTSELECT,INSERT,UPDATE,DELETEONdatabase1.*TO'pcms';--赋予pcms账号,datab......
  • Bootstrap浅了解 && jQuery的一些常用函数
    Bootstrap是用于设计响应性网页和应用程序的前端框架。它采用移动优先的web开发方法,包括预构建的CSS样式和类,以及一些JavaScript功能。可以使用Bootstrap构建响应性网站,使......
  • 学编程这么久,还傻傻分不清什么是方法(method),什么是函数(function)?
    在编程语言中有两个很基础的概念,即方法(method)和函数(function)。如果达到了编程初级/入门级水平,那么你肯定在心中已有了初步的答案。也许在你心中已有答案了除去入参、返回值......
  • mysql if判断字符串比较
    一、ifnull判断selectifnull(param,1);#如果param为null则输出1,如果不为null,则输出param当使用concat拼接时,如果有列值为null,结果从null到最后都是一个null填充,不会再显示......
  • Python 哈希函数
    1.hashlib模块实现了许多不同安全散列和消息摘要算法的通用接口。包括FIPS安全哈希算法SHA1,SHA224,SHA256,SHA384和SHA512以及RSA的MD5算法。如果您需要adler32或crc32哈......
  • sql server 解密存储过程的过程
    UsemasterGoifobject_ID('[sp_DecryptObject]')isnotnullDropProcedure[sp_DecryptObject]Gocreateproceduresp_DecryptObject(@Objectsysname,......
  • 多层语法糖&有参装饰器&装饰器修复技术&递归函数
    目录一.多层语法糖二.有参装饰器1.什么是有参装饰器:2.实操3.装饰器模板三.装饰器修复技术四.递归函数1.函数的递归调用2.递归函数一.多层语法糖语法糖会将下面紧挨着的......
  • mysql模糊查时间
     今天需要用到模糊查时间,直接模糊查时间一直报错,后来查阅网上一些资料知道date_format()可以根据指定格式来格式化日期值,并返回格式化的日期字符串,下面的内容都是从大佬......
  • [caffe解读] caffe从数学公式到代码实现2-基础函数类
    接着上一篇,本篇就开始读layers下面的cpp,先看一下layers下面都有哪些cpp。absval_layer.cpp其中,下面这些layer是不需要反向传播的,大部分都是io类,我们就不讲了,自己去看。thres......