首页 > 数据库技术 > 详细

(五)Oracle函数 序列 约束 索引

时间:2017-02-04 21:14:32      阅读:292      评论:0      收藏:0      [点我收藏+]

DECODE函数

DECODE函数基本语法

DECODE函数的语法如下:DECODE (expr, search1, result1[, search2, result2…][, default])

 

它用于比较参数expr的值,如果匹配到哪一个search条件,就返回对应的result结果,可以有多组search和result的对应关系,如果任何一个search条件都没有匹配到,则返回最后default的值。default参数是可选的,如果没有提供default参数值,当没有匹配到时,将返回NULL。

查询职员表,根据职员的职位计算奖励金额,当职位分别是’MANAGER’、’ANALYST’、’SALESMAN’时,奖励金额分别是薪水的1.2倍、1.1倍、1.05倍,如果不是这三个职位,则奖励金额取薪水值:

SELECT ename, job, sal,DECODE(job, MANAGER, sal*1.2,ANALYST, sal*1.1,SALESMAN, sal*1.05, sal) AS bonus FROM emp;

 

DECODE函数功能相似的有CASE语句,实现类似于if-else的操作。

 

SELECT ename, job, sal,job 
WHEN MANAGER THEN sal * 1.2 WHEN ANALYST THEN sal * 1.1 WHEN SALESMAN THEN sal * 1.05 ELSE sal END bonus FROM emp;

 

排序函数

ROW_NUMBER

ROW_NUMBER语法如下:ROW_NUMBER() OVER( PARTITION BY col1 ORDER BY col2)

表示根据col1分组,在分组内部根据col2排序。此函数计算的值就表示每组内部排序后的顺序编号,组内连续且唯一。

ROWNUM是伪列, ROW_NUMBER功能更强,可以直接从结果集中取出子集。

场景:按照部门编码分组显示,每组内按职员编码排序,并赋予组内编码

 

SELECT deptno, ename, empno,ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY empno) AS emp_id FROM emp;

 

RANK

RANK函数的语法如下:RANK() OVER(PARTITION BY col1 ORDER BY col2)

表示根据col1分组,在分组内部根据col2给予等级标识,即排名,相同的数据返回相同排名。特点是跳跃排序,如果有相同数据,则排名相同,比如并列第二,则两行数据都标记为2,但下一位将是第四名。

和ROW_NUMBER的区别是有结果有重复值,而ROW_NUMBER没有。

场景:按照部门编码分组,同组内按薪水倒序排序,相同薪水则按奖金数正序排序,并给予组内等级,用Rank_ID表示

SELECT deptno, ename, sal, comm,
RANK() OVER (PARTITION BY deptno
ORDER BY sal DESC, comm) "Rank_ID"
FROM emp;

※PARTITION 分区

DENSE_RANK

DENSE_RANK函数的语法如下: DENSE_RANK() OVER( PARTITION BY col1 ORDER BY col2)

表示根据col1分组,在分组内部根据col2给予等级标识,即排名,相同的数据返回相同排名。特点是连续排序,如果有并列第二,下一个排序将是三,这一点是和RANK的不同,RANK是跳跃排序。

场景:关联emp和dept表,按照部门编码分组,每组内按照员工薪水排序,列出员工的部门名字、姓名和薪水:

 

SELECT d.dname, e.ename, e.sal, 
DENSE_RANK()
OVER (PARTITION BY e.deptno ORDER BY e.sal)     
AS drank
FROM emp e join dept d
one.deptno = d.deptno;

 

 

 



 


 

(五)Oracle函数 序列 约束 索引

原文:http://www.cnblogs.com/Jonecmnn/p/6366327.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!