资源描述:
《Oracle分析函数》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Oracle分析函数——函数RANK,DENSE_RANK,FIRST,LAST…RANK功能描述:根据ORDERBY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置。组内的数据按ORDERBY子句排序,然后给每一行赋一个号,从而形成一个序列,该序列从1开始,往后累加。每次ORDERBY表达式的值发生变化时,该序列也随之增加。有同样值的行得到同样的数字序号(认为null时相等的)。然而,如果两行的确得到同样的排序,则序数将随后跳跃。若两行序数为1,则没有序数2,序列将给组中的下一行分配值3,DENSE_RANK则没有任何跳跃。SAMPLE:下例中计算每
2、个员工按部门分区再按薪水排序,依次出现的序列号(注意与DENSE_RANK函数的区别)DENSE_RANK功能描述:根据ORDERBY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置。组内的数据按ORDERBY子句排序,然后给每一行赋一个号,从而形成一个序列,该序列从1开始,往后累加。每次ORDERBY表达式的值发生变化时,该序列也随之增加。有同样值的行得到同样的数字序号(认为null时相等的)。密集的序列返回的时没有间隔的数SAMPLE:下例中计算每个员工按部门分区再按薪水排序,依次出现的序列号(注意与RANK函数的区别)SELECTdepartme
3、nt_id,first_name
4、
5、''
6、
7、last_nameemployee_name,salary,RANK()OVER(ORDERBYsalary)ASRANK_ORDER,DENSE_RANK()OVER(ORDERBYsalary)ASDENSE_RANK_ORDER FROMemployeesSELECTdepartment_id,first_name
8、
9、''
10、
11、last_nameemployee_name,salary,RANK()OVER(PARTITIONBYdepartment_idORDERBYsalary)ASRANK_PART_ORDER,
12、DENSE_RANK()OVER(PARTITIONBYdepartment_idORDERBYsalary)ASDENSE_RANK_PART_ORDER FROMemployeesFIRST功能描述:从DENSE_RANK返回的集合中取出排在最前面的一个值的行(可能多行,因为值可能相等),因此完整的语法需要在开始处加上一个集合函数以从中取出记录SAMPLE:下面例子中DENSE_RANK按部门分区,再按佣金commission_pct排序,FIRST取出佣金最低的对应的所有行,然后前面的MAX函数从这个集合中取出薪水最低的值;LAST取出佣金最高的对应的所有行
13、,然后前面的MIN函数从这个集合中取出薪水最高的值LAST功能描述:从DENSE_RANK返回的集合中取出排在最后面的一个值的行(可能多行,因为值可能相等),因此完整的语法需要在开始处加上一个集合函数以从中取出记录SAMPLE:下面例子中DENSE_RANK按雇用日期排序,FIRST取出salary最低的对应的所有行,然后前面的MAX函数从这个集合中取出薪水最低的值;LAST取出雇用日期最高的对应的所有行,然后前面的MIN函数从这个集合中取出薪水最高的值SELECTdepartment_id,first_name
14、
15、''
16、
17、last_nameemployee_name
18、,hire_date,salary,MIN(salary)KEEP(DENSE_RANKFIRSTORDERBYhire_date)OVER(PARTITIONBYdepartment_id)"Worst",MAX(salary)KEEP(DENSE_RANKLASTORDERBYhire_date)OVER(PARTITIONBYdepartment_id)"Best"FROMemployeesFIRST_VALUE功能描述:返回组中数据窗口的第一个值。SAMPLE:下面例子计算按部门分区按薪水排序的数据窗口的第一个值对应的名字,如果薪水的第一个值有多个,则从多个对
19、应的名字中取缺省排序的第一个名字LAST_VALUE功能描述:返回组中数据窗口的最后一个值。SAMPLE:下面例子计算按部门分区按薪水排序的数据窗口的最后一个值对应的名字,如果薪水的最后一个值有多个,则从多个对应的名字中取缺省排序的最后一个名字SELECTdepartment_id,first_name
20、
21、''
22、
23、last_nameemployee_name,hire_date,salary,FIRST_VALUE(first_name
24、
25、''
26、
27、last_name)OVER(PARTITIONBYdepartment_idORDERBYsalary