常用的一些分析函数
再在自己安装的数据的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 )
over ( [ query_partition_clause ] order_by_clause )
落后于谁,offset落后几位,default不落后任何人时显示的默认值
lead函数与lag刚好相反。