oracle 分析函数应用

常用的一些分析函数

再在自己安装的数据的hr用户模式下测试

<span style="font-size:14px;">SELECT emp.first_name,
       emp.salary,
       emp.manager_id,
       row_number() over(PARTITION BY emp.manager_id ORDER BY emp.salary DESC) row_number_dept, --薪资在部门中的排行
       rownum row_number, --行号
       ntile(2) over(ORDER BY emp.salary DESC) page_number_nt, --列返回每一行所应该被分配的桶号
       AVG(emp.salary) over(PARTITION BY emp.manager_id) avg_salary_department, --该部门薪水均值
       SUM(emp.salary) over(PARTITION BY emp.manager_id) sum_salary_department, --该部门薪水总额
       COUNT(emp.salary) over(PARTITION BY emp.manager_id) count_emp_department, --部门所有的员工
       dense_rank() over(PARTITION BY emp.manager_id ORDER BY emp.salary DESC) rank_salary_dept, --该人员的部门薪水排行
       dense_rank() over(ORDER BY emp.salary DESC) dense_rank_salary_company, --该人员的全公司密集排行
       rank() over(ORDER BY emp.salary DESC) rank_salary_company,--该人员的全公司排行
       MIN(emp.salary) over(PARTITION BY emp.manager_id) min_salary_dept, --部门的最低薪水       
       MIN(emp.salary) keep(dense_rank FIRST ORDER BY emp.salary) over(PARTITION BY emp.manager_id) min_salary_dept_first, --部门的最低薪水
       first_value(emp.salary) over(PARTITION BY emp.manager_id ORDER BY emp.salary) min_salary_dept_firstv, --部门的最低薪水     
       
       MAX(emp.salary) over(PARTITION BY emp.manager_id) max_salary_dept, --部门的最高薪水 
       MAX(emp.salary) keep(dense_rank LAST ORDER BY emp.salary) over(PARTITION BY emp.manager_id) max_salary_dept_last, --部门的最高薪水 
       last_value(emp.salary) over(PARTITION BY emp.manager_id ORDER BY emp.salary) max_salary_dept_lastv, --部门的最高薪水
       
       lag(emp.first_name, 1, '00') over(ORDER BY emp.salary DESC) last_persion, --薪水在自己前一位的人
       lead(emp.first_name, 1, '00') over(ORDER BY emp.salary DESC) next_persion --薪水在自己后一位的人
  FROM employees emp
ORDER BY emp.salary DESC;</span>

其中ntile函数
语法: ntile(expr) over([partition_clause] order_by_clause)
可以看作是把有序的数据集合平均分配到expr指定的数量的桶中,将桶号分配给每一行。
如果不能平均分配,则较小桶号的桶分配额外的行,并且各个桶中能放的行数最多相差1。

其中 rank() over,dense_rank() over,row_number() over函数的区别
http://blog.csdn.net/huhu307/article/details/51177346

其中lag函数
语法:lag ( expression [, offset [, default] ] )
over ( [ query_partition_clause ] order_by_clause )
落后于谁,offset落后几位,default不落后任何人时显示的默认值

lead函数与lag刚好相反。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值