Oracle分析函数入门

it2022-05-05  181

一:分析函数是什么?分析函数是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():     是跳跃排序,两个第二名下来就是第四名。

   

 

转载于:https://www.cnblogs.com/AI-xiaocai/p/11178310.html

相关资源:各显卡算力对照表!

最新回复(0)