• Oracle分析函数入门


    一:分析函数是什么?
    分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值。

              

    二:分析函数和聚合函数的不同之处是什么?

    普通的聚合函数用group by分组,每个分组返回一个统计值,而分析函数采用partition by分组,并且每组每行都可以返回一个统计值。

                  

    三:分析函数的形式
    分析函数带有一个开窗函数over(),包含两个分析子句:分组(partition by)、 排序(order by),他们的使用形式如下:over(partition by xxx order by yyy)。

        

    四:分析函数例子(在scott用户下模拟)

    示例一:按照部分Id分组,然后计算每组薪水的最大值

    1 select employee_id,last_name,department_id,salary,max(salary) over(partition by department_id) "max_val"
    2 from cux_employees
    3 order by employee_id

    运行结果:

    示例二:按照部门名称分组,然后按照部门内员工薪水升序排列,计算每组成员薪水的排序情况

    1 SELECT d.department_name,
    2        e.last_name,
    3        e.salary,
    4        rank() over(PARTITION BY d.department_name ORDER BY e.salary) dept_salary_rank1,
    5        dense_rank() over(PARTITION BY d.department_name ORDER BY e.salary) dept_salary_rank2,
    6        row_number() over(PARTITION BY d.department_name ORDER BY e.salary) dept_salary_rank3
    7 FROM cux_employees e,cux_departments d
    8 WHERE e.department_id = d.department_id

    运行结果:

     补充:

    rank(),dense_rank(),row_number()的区别

    一:语法
         rank() over([partition by col1] order by col2)
         dense_rank() over([partition by col1] order by col2)
         row_number() over([partition by col1] order by col2)
         其中[partition by col1]可省略。

    二:区别
        三个分析函数都是按照col1分组内从1开始排序。


        row_number():是没有重复值的排序(即使两天记录相等,顺序值也是不重复的);

      

        dense_rank(): 是连续排序,两个第二名下来的是第三名;

      

        rank():     是跳跃排序,两个第二名下来就是第四名。

       

  • 相关阅读:
    探索c#之Async、Await剖析
    探索C#之布隆过滤器(Bloom filter)
    探索C#之虚拟桶分片
    刷新本地的DNS缓存数据
    php取整函数ceil,floor,round,intval函数的区别
    这样顶级人生规划 ,想不成功都难
    全篇干货,10分钟带你读透《参与感》
    iOS审核秘籍】提审资源检查大法
    php如何遍历多维的stdClass Object 对象,php的转换成数组的函数只能转换外面一丛数组
    RDS MySQL 连接数满情况的处理
  • 原文地址:https://www.cnblogs.com/AI-xiaocai/p/11178310.html
Copyright © 2020-2023  润新知