zoukankan      html  css  js  c++  java
  • 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():     是跳跃排序,两个第二名下来就是第四名。

       

  • 相关阅读:
    python CreateUniqueName()创建唯一的名字
    node 创建静态服务器并自动打开浏览器
    基于jQuery 的插件开发
    Fetch
    纯css 来实现下拉菜单
    javascript模板引擎之
    jquery jsonp 跨域
    数据库增删改查
    Promise
    Vue.js
  • 原文地址:https://www.cnblogs.com/AI-xiaocai/p/11178310.html
Copyright © 2011-2022 走看看