zoukankan      html  css  js  c++  java
  • Oracle over函数学习

    sql over的作用及用法

    RANK ( ) OVER ( [query_partition_clause] order_by_clause )
    DENSE_RANK ( ) OVER ( [query_partition_clause] order_by_clause )
    

      可实现按指定的字段进行分组,然后按照另一个字段在分组内进行排序,其中PARTITION BY 为分组字段,ORDER BY 指定排序字段。over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。其参数:over(partition by columnname1 order by columnname2)。含义:按columname1指定的字段进行分组,然后在分组的基础之上按照columnname2字段在分组内进行排序。

    例如:EMP表中,有三个个部门的记录:DEPTNO分别为10、20和30。以下SQL就是指在部门10、20和30三个部门中按照薪水进行排序。

    select DEPTNO,SAL,rank() OVER(partition by DEPTNO order by SAL DESC) from EMP

      同时需要注意rank()、dense_rank()和Row_number()的区别:

    • row_number() 是没有重复值的排序(即使两天记录相等也是不重复的),可以利用它来实现分页   
    • dense_rank() 是连续排序,两个第二名仍然跟着第三名   
    • rank() 是跳跃排序,两个第二名下来就是第四名。

      例如如下dense_rank和上面rank()语句结果的区别:

    select DEPTNO,SAL,DENSE_RANK() OVER(partition by DEPTNO order by SAL) from EMP

     

      对于row_number()结果如下:

    select DEPTNO,SAL,row_Number() OVER(partition by DEPTNO order by SAL DESC) from EMP
    

      

      同时over语句也可以和SUM()语句一起使用,不同的OVER()语句代表不同的求和方式。还以EMP表为例:

    • sum(sal) over (partition by deptno order by ename) 按部门“连续”求总和
    • sum(sal) over (partition by deptno) 按部门求总和
    • sum(sal) over (order by deptno,ename) 不按部门“连续”求总和
    • sum(sal) over () 不按部门,求所有员工总和,效果等同于sum(sal)。
    select DEPTNO,SAL,SUM(SAL) OVER() 总和,SUM(SAL) OVER(ORDER by SAL) 连续求和 from EMP 
    

     

    select DEPTNO,SAL,SUM(SAL) OVER(partition by deptno) 部门总和,SUM(SAL) OVER(partition by deptno ORDER by SAL) 部门连续求和 from EMP 
    

      

  • 相关阅读:
    资源 | TensorFlow推出新工具Seedbank:即刻使用的预训练模型库【转】
    Vim 基本設置 – 使用Vim-plug管理插件 (3)【转】
    Linux kernel 编译问题记录【转】
    深度学习(四)卷积神经网络入门学习(1)【转】
    深度学习:Keras入门(二)之卷积神经网络(CNN)【转】
    深度学习:Keras入门(一)之基础篇【转】
    CNN笔记:通俗理解卷积神经网络【转】
    [Deep Learning] 神经网络基础【转】
    一文弄懂神经网络中的反向传播法——BackPropagation【转】
    Testin
  • 原文地址:https://www.cnblogs.com/wxgblogs/p/6848904.html
Copyright © 2011-2022 走看看