首页 > 数据库 >Oracle聚合函数RANK和dense_rank的使用

Oracle聚合函数RANK和dense_rank的使用

时间:2023-06-08 20:34:35浏览次数:45  
标签:语文 dense RANK cai yang rank 排序


聚合函数RANK 和 dense_rank 主要的功能是计算一组数值中的排序值。
  
  在9i版本之前,只有分析功能(analytic ),即从一个查询结果中计算每一行的排序值,是基于order_by_clause子句中的value_exprs指定字段的。
  
  其语法为:
  
  RANK ( ) OVER ( [query_partition_clause] order_by_clause )
  
  在9i版本新增加了合计功能(aggregate),即对给定的参数值在设定的排序查询中计算出其排序值。这些参数必须是常数或常值表达式,且必须和ORDER BY子句中的字段个数、位置、类型完全一致。
  
  其语法为:
  
  RANK ( expr [, expr]... ) WITHIN GROUP
  ( ORDER BY
  expr [ DESC | ASC ] [NULLS { FIRST | LAST }]
  [, expr [ DESC | ASC ] [NULLS { FIRST | LAST }]]...
  )
  
  例子1:
  
  有表Table内容如下
  
  COL1 COL2
    1 1
    2 1
    3 2
    3 1
    4 1
    4 2
    5 2
    5 2
    6 2
  
  分析功能:列出Col2分组后根据Col1排序,并生成数字列。比较实用于在成绩表中查出各科前几名的信息。
  
  SELECT a.*,RANK() OVER(PARTITION BY col2 ORDER BY col1) "Rank" FROM table a;
  
  结果如下:
  
  COL1 COL2 Rank
    1 1   1
    2 1   2
    3 1   3
    4 1   4
    3 2   1
    4 2   2
    5 2   3
    5 2   3
    6 2   5
  
  例子2:
  
  TABLE:A (科目,分数)
  
  数学,80
  语文,70
  数学,90
  数学,60
  数学,100
  语文,88
  语文,65
  语文,77
  
  现在我想要的结果是:(即想要每门科目的前3名的分数)

数学,100

  数学,90

  数学,80

  语文,88

  语文,77

  语文,70

  

  那么语句就这么写:

  

  select * from (select rank() over(partition by 科目 order by 分数 desc) rk,a.* from a) t

  where t.rk<=3;

  

  例子3:

  

  合计功能:计算出数值(4,1)在Orade By Col1,Col2排序下的排序值,也就是col1=4,col2=1在排序以后的位置

  

  SELECT RANK(4,3) WITHIN GROUP (ORDER BY col1,col2) "Rank" FROM table;

  

  结果如下:

  Rank

  4

  

  dense_rank与rank()用法相当,但是有一个区别:dence_rank在并列关系是,相关等级不会跳过。rank则跳过

  

  例如:表

  

  A      B      C

  a     liu     wang

  a     jin     shu

  a     cai     kai

  b     yang     du

  b     lin     ying

  b     yao     cai

  b     yang     99

  

  例如:当rank时为:

  

  select m.a,m.b,m.c,rank() over(partition by a order by b) liu from test3 m

  

   A     B       C     LIU

   a     cai      kai     1

   a     jin      shu     2

   a     liu      wang     3

   b     lin      ying     1

   b     yang     du      2

   b     yang     99      2

   b     yao      cai     4

  

  而如果用dense_rank时为:

  

  select m.a,m.b,m.c,dense_rank() over(partition by a order by b) liu from test3 m

  

   A     B       C     LIU

   a     cai     kai     1

   a     jin     shu     2

   a     liu     wang     3

   b     lin     ying     1

   b     yang     du      2

   b     yang     99      2

   b     yao     cai     3

标签:语文,dense,RANK,cai,yang,rank,排序
From: https://blog.51cto.com/u_16065168/6442985

相关文章

  • [重读经典论文] RetinaNet——Focal Loss for Dense Object Detection
    1.前言这篇论文也是何凯明的团队在2017年的论文《FocalLossforDenseObjectDetection》中提出的,网络架构魔改了FPN,因此这篇论文的重点是提出了新的分类Loss——FocalLoss,用一个合适的函数,去度量难分类和易分类样本对总的损失函数的贡献。解决了传统交叉熵损失函数因为类别......
  • mpi4py.MPI.COMM_WORLD.Get_size失败——mpiexec and python mpi4py gives rank 0 and
    参考:https://stackoverflow.com/questions/29264640/mpiexec-and-python-mpi4py-gives-rank-0-and-size-1  =========================================== 运行代码:importmpi4py.MPIasMPIcomm=MPI.COMM_WORLDcomm_rank=comm.Get_rank()comm_size=comm.G......
  • densenet tensorflow 中文汉字手写识别
    densenet中文汉字手写识别,代码如下: importtensorflowastfimportosimportrandomimportmathimporttensorflow.contrib.slimasslimimporttimeimportloggingimportnumpyasnpimportpicklefromPILimportImageimporttensorflowastf#fromtflearn.lay......
  • APRIL 2022-Explanation-Aware Experience Replay in Rule-Dense Environments
    I.INTRODUCTION解释是人类智能的关键机制,这种机制有可能提高RL代理在复杂环境中的表现实现这一目标的一个核心设计挑战是将解释集成到计算表示中。即使在最小的规则集变化下,将规则集(或部分规则集)编码到智能体的观察空间等方法也可能导致严重的重新训练开销,因为规则的语义被......
  • 《SoftRank: Optimising Non-Smooth Rank Metrics》论文阅读
    背景SoftRank是一种listwise的建模方法,listwise建模的难点在于损失函数的选取。在排序中常用NDCG作为评价指标,最直接的想法是NDCG作为损失函数,这样优化目标和评价指标是一致的,没有gap,但是NDCG是不可以微的(需要排序的IR评价指标都是不可微),没法用梯度下降法来优化。SoftRank采用了......
  • [HiBench] 安装HiBench,测试在Spark上跑PageRank与修改源码测试
    [HiBench]安装HiBench,测试在Spark上跑PageRank与修改源码测试背景:我想在HiBench上测试在Spark上跑PageRank性能,并想要修改PageRank的源码进行测试。本来,HiBench在README里写的已经挺清楚的了,直接照着做就行。奈何我用的服务器没有珂学上网,所以还是遇到了一点小麻烦。下载HiBe......
  • 窗口函数DENSE_RANK()/DENSE_RANK()/ROW_NUMBER() 区别
    SQL语句之DENSE_RANK函数:DENSE_RANK()是一个窗口函数,它为分区或结果集中的每一行分配排名,而排名值没有间隙。DENSE_RANK()。如果使用DENSE_RANK()进行排名会得到:1,1,2,3,4。RANK()。如果使用RANK()进行排名会得到:1,1,3,4,5。ROW_NUMBER()。如果使用ROW_NUMBER()进行排名会得到:1,2......
  • oracle 分析函数 RANK、DENSE_RANK、ROW_NUMBER
    Row_number函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。 Dense_rank函数返回一个唯一的值,除非当碰到相同数据时,此时所有相同数据的排名都是一样的。 Rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条......
  • 论文解读《Automatically discovering and learning new visual categories with rank
    论文信息论文标题:Automaticallydiscoveringandlearningnewvisualcategorieswithrankingstatistics论文作者:K.Han, Sylvestre-AlviseRebuffi, SébastienEhrhardt, A.Vedaldi, AndrewZisserman论文来源:ICLR2020论文地址:download 论文代码:download视屏讲解:clic......
  • Hive 如何巧用分布函数percent_rank()剔除极值求均值
    场景描述前期写过一篇关于剔除订单极值求订单均值的案例,之前使用的是 dense_rank 函数对订单金额进行排序后,过滤掉最大值最小值后进行处理,最近工作刚好使用到分布函数percent_rank,想起来应该也可以用到这个场景;percent_rank()简介percent_rank()函数为分布函数,用于返回某个......