高效的SQL语句之分析函数

[Oracle]高效的SQL语句之分析函数(二)--max()  如果我们按照示例想得到每个部门薪水值最高的雇员的纪录,可以有四种方法实现:先创建示例表create table empasselect * from scott.emp;alter table empadd constraint emp_pkprimary key(empno);create table deptasselect * from scott.dept;alter t 阅读详情

高效的SQL语句之分析函数--row_number() /rank()/dense_rank

Oracle分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法
ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)

表示根据COL1分组,在分组内部根据 COL2排序
而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的)

RANK() 类似,不过RANK 排序的时候跟派名次一样,可以并列2个第一名之后 是第3名

LAG 表示 分组排序后 ,组内后面一条记录减前面一条记录的差,第一条可返回 NULL

BTW: EXPERT ONE ON ONE 上讲的最详细,还有很多相关特性,文档看起来比较费劲

row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序)
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。
相比之下row_number是没有重复值的
lag(arg1,arg2,arg3):
arg1是从其他行返回的表达式
arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索以前的行的数目。
arg3是在arg2表示的数目超出了分组的范围时返回的值。

有些时候我们希望得到指定数据中的前n列,示例如下:

得到每个部门薪水最高的三个雇员:

先创建示例表

create   table  emp
as
select   *   from  scott.emp;

alter   table  emp
add   constraint  emp_pk
primary   key (empno);

create   table  dept
as
select   *   from  scott.dept;

alter   table  dept
add   constraint  dept_pk
primary   key (deptno);

先看一下row_number() /rank()/dense_rank()三个函数之间的区别

  select  emp.deptno,emp.sal,emp.empno,row_number()  over  (partition  by  deptno  order   by  sal  desc ) row_number,   -- 1,2,3
  rank()  over  (partition  by  deptno  order   by  sal  desc ) rank,  -- 1,1,3
  dense_rank()  over  (partition  by  deptno  order   by  sal  desc ) dense_rank  from  emp  -- 1,1,2

结果如下:

10      5000.00      7839      1      1      1
10      2450.00      7782      2      2      2
10      1300.00      7934      3      3      3
20      3000.00      7788      1      1      1
20      3000.00      7902      2      1      1
20      2975.00      7566      3      3      2
20      1100.00      7876      4      4      3
20      800.00      7369      5      5      4
30      2850.00      7698      1      1      1
30      1600.00      7499      2      2      2

取每个部门的薪水前三位雇员:

select  t.deptno,t.rank,t.sal  from
 (
 
select  emp. * ,row_number()  over  (partition  by  deptno  order   by  sal  desc ) row_number,   -- 1,2,3
  rank()  over  (partition  by  deptno  order   by  sal  desc ) rank,  -- 1,1,3
  dense_rank()  over  (partition  by  deptno  order   by  sal  desc ) dense_rank  from  emp  -- 1,1,2
 ) t
where  t.rank <= 3

结果如下:

10      1      5000.00
10      2      2450.00
10      3      1300.00
20      1      3000.00
20      1      3000.00
20      3      2975.00
30      1      2850.00
30      2      1600.00
30      3      1500.00

如果想输出成deptno  sal1   sal2   sal3这种类型的格式
步骤一(decode):

select  t.deptno,decode(row_number, 1 ,sal) sal1,decode(row_number, 2 ,sal) sal2,decode(row_number, 3 ,sal) sal3  from
 (
 
select  emp. * ,row_number()  over  (partition  by  deptno  order   by  sal  desc ) row_number,   -- 1,2,3
  rank()  over  (partition  by  deptno  order   by  sal  desc ) rank,  -- 1,1,3
  dense_rank()  over  (partition  by  deptno  order   by  sal  desc ) dense_rank  from  emp  -- 1,1,2
 ) t
where  t.rank <= 3

结果如下:

10      5000         
10                    2450     
10                              1300
20      3000         
20                    3000     
20                                2975
30      2850         
30                   1600     
30                              1500

步骤二(使用聚合函数去除null,得到最终结果):

select  t.deptno, max (decode(row_number, 1 ,sal)) sal1, max (decode(row_number, 2 ,sal)) sal2, max (decode(row_number, 3 ,sal)) sal3  from
 (
 
select  emp. * ,row_number()  over  (partition  by  deptno  order   by  sal  desc ) row_number,   -- 1,2,3
  rank()  over  (partition  by  deptno  order   by  sal  desc ) rank,  -- 1,1,3
  dense_rank()  over  (partition  by  deptno  order   by  sal  desc ) dense_rank  from  emp  -- 1,1,2
 ) t
where  t.rank <= 3
group   by  t.deptno 

结果如下:

10      5000      2450      1300
20      3000      3000      2975
30      2850      1600      1500

 

 原文地址 http://blog.youkuaiyun.com/huanghui22/archive/2007/05/03/1595166.aspx

SQL分析函数 SQL分析函数 racle 分析函数——函数列表 RANK : 根据 ORDER BY 子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置 DENSE_RANK : 根据 ORDER BY 子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置 立即下载

相关推荐

使用openMVS对样例数据进行重建

openMVS根据github上的步骤进行编译。注意,如果没有GPU,用不了CUDA的话,那么需要在openMVS目录下找到CmakeLists.txt文件,把CUDA设置为OFF: SET(OpenMVS_USE_CUDA OFF CACHE BOOL "Enable CUDA library") 可执行的文件生成在openMVS_build/bin/里面,在openMVS_build文件夹下打开终端,按照顺序执行如下命令即可逐步重建。其中,-w 设置的是数据的总路径,-i 后接输入的文件名,-o

YuhsiHu的博客 2888

SQL中的分析函数

分析函数 1、聚合分析函数 SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。 avg():计算一个组和数据窗口内表达式的平均值 sum():计算组中表达式的累积和 max():在一个组中的数据窗口中查找表达式的最大值 min():在一个组中的数据窗口中查找表达式的最小值 count(): 对一组内的事务进行累积计数 2、排名分析函数 row_number()按照值排序时产生一个自增编号,不会重复(如:1、2、3、4、5、6) rank() 按照值排序时产生一个自增编号,值相等时会

春花秋月冬雪风,留得残荷听雨声。 2415

RDMA网络通信技术、NCCL集合通讯(GPU)

NCCL 是 NVIDIA 专为 GPU 设计的高性能集合通信库,用于优化多 GPU、多节点间的集体操作(如 AllReduce、Broadcast、AllGather 等),是深度学习分布式训练的核心组件。RDMA 允许计算机直接访问远程内存,无需 CPU 干预,大幅降低了网络通信的延迟和 CPU 开销。常见的 RDMA 实现包括。是两项关键技术,用于优化节点间数据传输效率和大规模并行计算性能。在高性能计算(HPC)、人工智能训练和数据密集型场景中,

weixin_42795092的博客 2422

SQL分析函数,看这一篇就够了

数据库SQL分析函数/窗口函数专题,值得收藏!几乎涵盖所有数据库,例如:Oracle、Hive、MySQL8.0、MaxComputer等。企业面试中,更是钟情分析函数问...

玉皇大帝不开心 741

别再为格式发愁:safetensors转GGUF的三种高效方法及Ollama集成对比

本文详细介绍了将safetensors格式转换为GGUF格式的三种高效方法,包括llama.cpp原生转换、GGUF官方工具链和Transformers中转方案,并对比了它们在Ollama集成中的表现。文章还提供了实际项目中的踩坑经验和性能调优建议,帮助开发者快速掌握模型转换技术。

weixin_42651281的博客 640

Imputation Methods for scRNA Sequencing Data

越来越多的研究者使用单细胞RNA测序(scRNA-seq)技术来表征单细胞水平的转录图谱。他们用它来研究复杂组织的异质性、转录组动力学和未知生物的多样性。然而,在基因表达模式随机性的scRNA-seq数据中普遍存在许多技术和生物学上的噪音。这些数据通常具有高维、稀疏和大量“dropout”值的特点,并且受批处理效应的影响。scRNA-seq数据中大量的“dropout”值严重掩盖了基因之间的重要关系,阻碍了下游分析。因此,scRNA-seq数据dropout值的估算就显得尤为重要。

qq_34179307的博客 542

SQL数据分析常用函数

本文汇总了数据分析中处理和操作数据常用的SQL 函数,并提供了相关示例。

zwldn的博客 3626

最大似然估计、梯度下降、EM算法、坐标上升

主要讲解的是机器学习中参数学习算法之间的区别,以及应用的场景。 最大似然估计: 其中目标函数是对数似然函数。为了求目标函数取最大值时的theta。有两个关机键步骤,第一个是对目标函数进行求导,第二个是另导数等于0,求解后直接得到最优theta。两个步骤缺一不可。 梯度下降: 对目标函数进行求导,利用导函数提供的梯度信息,使参数往梯度下降最快的方向移动一小步,来更新参数。为什

tzl2093的博客 5141

sql中的分析函数

一 ,分析函数和聚合函数的区别 聚合函数: 1 聚合函数是能够直接使用的。 max() ,min(),avg(),count()… 2 聚合函数的计算结果返回一个值。 3 GROUP BY 分组之后,聚合函数会根据分组的字段,每一个组返回一个计算结果。 4 聚合函数若是要和其余的字段一块儿查询,那么其余的字段必须是分组的字段。 5 GROUP BY 之后,在 SELECT 后面 只能查询 被分组的字段,和聚合函数,其余的未分组的字段不容许直接查询。 6 若是表中不存在的数据,不受以上条件的约束。 分析

ths512的博客 4189

基于springboot生鲜食品订购系统的设计与实现

近年来互联网络的迅猛发展和电子终端设备的普及,赋予了各行业充足的发展空间。微信小程序的O2O生鲜食品订购相比于传统信息技术,时效性是它最大的特色,已经在电子娱乐、经济等中发挥着举足轻重的作用。短时间内迅速扩大了线上管理系统的规模。尽管O2O生鲜食品订购已经有了很大程度的发展,但在微信小程序的O2O生鲜食品订购领域上却少有建设。

1024

基于VisionMaster实现数据实时存储至MySQL (二)

摘要:之前的分享主要聚焦于简单的一维数据实时存储。但在做缺陷检测项目时,情况往往更加复杂:一张检测图像中可能同时存在多个缺陷,每个缺陷都有一组独立的核心参数(如质心、长短轴、面积等)。如何在 MySQL 中记录这些成组出现的缺陷数据,而不只是简单的单条记录?

haier123888的博客 226

oracle分析函数汇总

1、count() over()  统计分区中各组的行数select ename,esex,eage,count(*) over() from emp; --总计数 select ename,esex,eage,count(*) over(order by eage) from emp; --递加计数 select ename,esex,eage,count(*) over(partition b...

cc_0101的博客 3万+

【Flink】Flink提交任务到Yarn报错Unable to close file because the last blockBP enough number of replicas

当使用 HDFS 存储文件时,每个数据块会有多个副本分布在不同的节点上,以确保数据的可靠性和容错性。然而,由于某种原因,最后一个数据块 blk_1101776325_28036289 的副本数量不足,导致无法成功关闭文件。如果确定副本数量正确,并且问题仍然存在,可以尝试手动修复副本不足的情况。异常消息表明在关闭文件时出现问题,我的原因是hadoop上有个节点有问题,导致提交到那个节点的时候,无法传递包到相关的机器上。检查 HDFS 集群的状态,确保所有节点都正常工作,没有节点宕机或网络故障等问题。

九师兄 935

Oracle]高效的SQL语句之分析函数

[Oracle]高效的SQL语句之分析函数(一)--sum() 实际应用中我们可以通过sum()统计出组中的总计或者是累加值,具体示例如下: 1.创建演示表 createtableempasselect*fromscott.emp;altertableempaddconstraintemp_pkprimarykey(empno...

weixin_33888907的博客 95

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

oracle分析函数 汇总,Oracle高效的SQL语句之分析函数汇总

如果我们按照示例想得到每个部门薪水值最高的雇员的纪录,可以有四种方法实现:先创建示例表 createtableemp as select*fromscott.emp; altertableemp addconstraintemp_pk primarykey(empno); createtabledept as select*fromscott.dept; altertabledep...

weixin_39956451的博客 172

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Oracle高效的SQL语句之分析函数汇总

小毛头的BLOG[Oracle]高效的SQL语句之分析函数(一)--sum()  实际应用中我们可以通过sum()统计出组中的总计或者是累加值,具体示例如下:1.创建演示表create table empasselect * from scott.emp;alter table empadd constraint emp_pkprimary key(empno);create 

swfcsunboy 1023

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

oracle 高效函数,[Oracle]高效的SQL语句之分析函数(二)

本系列文章导航[Oracle]高效的SQL语句之分析函数(一)--sum()[Oracle]高效的SQL语句之分析函数(二)--max()[Oracle]高效的SQL语句之分析函数(三)--row_number() /rank()/dense_rank()[Oracle]高效的SQL语句之分析函数(四)--lag()/lead()如果我们按照示例想得到每个部门薪水值最高的雇员的纪录,可以有四种方法...

weixin_29035147的博客 120

[Oracle]高效的SQL语句之分析函数(一)--sum()

 实际应用中我们可以通过sum()统计出组中的总计或者是累加值,具体示例如下:1.创建演示表create table empasselect * from scott.emp;alter table empadd constraint emp_pkprimary key(empno);create table deptasselect * from scott.dept;alter

小毛头的BLOG 1万+

[Oracle]高效的SQL语句之分析函数(一)

[Oracle]高效的SQL语句之分析函数(一)--sum() 实际应用中我们可以通过sum()统计出组中的总计或者是累加值,具体示例如下:1.创建演示表create table empasselect * from scott.emp;alter table empadd constraint emp_pkprimary key(empno);create table d

421

[Oracle]高效的SQL语句之分析函数(三)

[Oracle]高效的SQL语句之分析函数(三)--row_number() /rank()/dense_rank() 有些时候我们希望得到指定数据中的前n列,示例如下: 得到每个部门薪水最高的三个雇员: 先创建...

cineqi9136的博客 87

[Oracle]高效的SQL语句之分析函数(一)(二)

[Oracle]高效的SQL语句之分析函数(一)--sum() 实际应用中我们可以通过sum()统计出组中的总计或者是累加值,具体示例如下: 1.创建演示表 createtableempasselect*...

cineqi9136的博客 114
上一篇: DWR的异常处理
下一篇: C# winform reportview
BlueSuperMan
博客等级 码龄24年 11粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值