一、decode 函数

(1)用法:decode(colName,search1,result1,search2,result2.....,[default])
(2)逻辑:检索colName的值,如果是search1结果就是result1,同理往后....否则使用default,没有default时,返回的是null

--练习:年终发奖金,职位'MANAGER'发放月薪的1.2倍,职位'SALESMAN'发放月薪的1.1倍,
--     职位'CLERK'发放月薪的1.05倍,其他职位发放月薪作为奖金,查询员工的姓名,职位,年终奖。       select ename,job,sal,decode(job,'MANAGER',sal*1.2,'SALESMAN',sal*1.1,'CLERK',sal*1.05,sal) 年终奖 from emp; 

(3)decode与group by连用

--练习: 职位'MANAGER','SALESMAN'是VIP,'CLERK'SVIP,其他 IPselect ename,job,decode(job,'MANAGER','SVIP','SALESMAN','SVIP','CLERK','VIP','IP') from emp;
--练习:查询这三种级别的人数select job,decode(job,'MANAGER','SVIP','SALESMAN','SVIP','CLERK','VIP','IP') 级别,count(*) 级别人数 from emp group by job;   or                          select decode(job,'MANAGER','SVIP','SALESMAN','SVIP','CLERK','VIP','IP'),count(*) 级别人数 from emp group by decode(job,'MANAGER','SVIP','SALESMAN','SVIP','CLERK','VIP','IP');

(4)decode与order by连用

--练习:部门中有4个部门'ACCOUNTING','RESEARCH','SALES','OPERATIONS'
--练习:按照部门名称排序,查询部门信息select * from dept order by dname desc;
--练习:排序规则'ACCOUNTING','SALES','RESEARCH','OPERATIONS'依次排序select deptno,dname,loc,decode(dname,'ACCOUNTING',1,'SALES',2,'RESEARCH',3,'OPERATIONS',4) from dept order by decode(dname,'ACCOUNTING',1,'SALES',2,'RESEARCH',3,'OPERATIONS',4);

二、case
   与decode函数功能一样的:

--格式:case colName when search1 then result1
--                  when search2 then result2
--                    .......
--                  else result0 end
--练习: select ename,job,sal,case job when 'MANAGER' then sal*1.2 when 'SALESMAN' then sal*1.1when 'CLERK' then sal*1.05else sal end 年终奖 from emp;            

三、排序函数:(写在select子句中)

举例:假设现在又三名同学成绩排序,各个函数的排序规则如下:
     1: row_number() over(partition by colName1 order by colName2); 连续不重复   第一名 第二名 第三名
     2: rank() over(partition by colName1 order by colName2);               重复不连续   第一名 第一名 第三名
     3: rank_dense()  over(partition by colName1 order by colName2);  连续重复     第一名 第一名 第二名

     排序函数可以直接进行区间查询
        partition by colName1:表示按照colName1分组(可以省略)
        order by colName2:表示按照colName2排序

--练习:查询所有员工信息,按照月薪排序select e.*,row_number() over(order by sal) rn from emp e;select e.*,rank() over(order by sal) rn from emp e;select e.*,rank_dense() over(order by sal) rn from emp e;
--练习:查看每个部门的员工信息,按照月薪排名select e.*,row_number() over(partition by deptno order by sal) rn from emp e;select e.*,rank() over(partition by deptno order by sal) rn from emp e;select e.*,rank_dense() over(partition by deptno order by sal) rn from emp e;
--练习:区间查询select * from (select e.*,row_number() over(order by sal) rn from emp e)where rn between 1 and 3;

四、高级分组函数
     rollup(p1,p2,p3)
     参数n个,共分n+1种情况,先按照所有参数分组 先按所有参数分一种情况,然后往后一次少一个参数进行分组

--练习:先按照p1,p2,p3分组,再按照p1,p2分组,再按p1分组,最后整张表为一组select year_id,month_id,day_id,sum(sales_value) from salestable group by rollup(year_id,month_id,day_id);

     cube(p1,p2,p3)
     参数有n个,组合有2^n种,p1,p2,p3,p1p2,p1p3,p2p3,p1p2p3,null中;

  select year_id,month_id,day_id,sum(sales_value) from salestable group by cube(year_id,month_id,day_id);

     grouping sets(p1,p2,p3)
     n个参数,组合有n个,每个参数为一种情况,可以自定义分组

--练习:统计每年,月,日的销售额select year_id,month_id,day_id,sum(sales_value) from salestable group by grouping sets(year_id,(year_id,month_id),(year_id,month_th,day_id));
--上述例子有45种,3+12+30
--练习:统计每年,每月,每日select year_id,month_id,day_id,sum(sales_value) from salestable group by grouping sets(year_id,month_id,day_id);

十三、Oracle学习笔记:decode函数、排序函数和高级分组函数相关推荐

  1. 【Java】Java学习笔记(2)——Java面向对象基础作业函数题

    本人私人博客:Megalomania,大部分文章会现在博客上传,有不足之处欢迎指正. 学校小学期Java课程的练习题,留个档便于以后需要时候有例子可以回忆,写的烂的地方请多多包含 1.求两个数值之和 ...

  2. python eval 入门_Python学习笔记整理3之输入输出、python eval函数

    Python学习笔记整理3之输入输出.python eval函数 来源:中文源码网    浏览: 次    日期:2018年9月2日 Python学习笔记整理3之输入输出.python eval函数 ...

  3. r语言c函数怎么用,R语言学习笔记——C#中如何使用R语言setwd()函数

    在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//") > setwd("e:\桌面\") > ...

  4. Oracle学习笔记(最重要的是PL/SQL编程)

    一:Oracle认证,与其它数据库比较,安装 Oracle安装会自动的生成sys用户和system用户: (1) sys用户是超级用户,具有最高权限,具有sysdba角色,有create databa ...

  5. 在大量数据迁移期间oracle学习笔记

    在数据迁移期间oracle学习笔记 0主键(自增) 1用户代码 2区域代码 3承保公司代码 4理赔编码 5投保确认码 6案件状态 7案件进展 8重开案件进展 9转换后案件状态 需求分析: 1.根据上述 ...

  6. oracle update单引号,Oracle学习笔记:update的字段中包括单引号

    平时update的时候直接更改字段内的值,例如: update table_temp set name = 'Hider' where id = 100; 但更新后的值中包括单引号,则不能按以上方式进 ...

  7. [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)

    原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...

  8. oracle:oracle学习笔记(四)循环、光标、异常、瀑布模型

    oracle学习笔记:循环.光标.异常 文章目录 打印Hello World 定义基本变量 引用型变量(单行)` my_name emp.ename%type ` 记录型变量(多行) `emp_rec ...

  9. Oracle学习笔记---(一)

    Oracle学习笔记---(一) 一 1.Oracle简介     Oracle是以高级结构化查询语言(SQL)为基础的大型关系数据库:是一个对象关系数据库管理系统(ORDBMS).它提供了关系数据库 ...

  10. Oracle学习笔记(七)——分组统计查询

    Oracle学习笔记(七)--分组统计查询 基础统计函数的使用 分组统计操作的实现,结合多表查询使用分组统计 常用统计函数 COUNT(*|[DISTINCT]字段) MAX(字段,日期或数字) MI ...

最新文章

  1. HDU 4540 威威猫系列故事――打地鼠(DP)
  2. 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词
  3. Spock 1.2 –轻松进行集成测试中的Spring Bean模拟
  4. IDEA快捷键eclipse版(有自定义部分)
  5. 黑龙江工程学院计算机系有几个门,黑龙江工程学院本科专业设置一览表
  6. Flask自定义错误页面的方法
  7. nginx动静分离配置_Nginx动静分离配置实例
  8. mongodb用户管理和服务安装
  9. Java -- IO
  10. saiku 展示优化
  11. 字符编码笔记:ASCII,Unicode和UTF-8(转)
  12. AcWing 895. 最长上升子序列(LIS朴素做法)
  13. linux系统编程 -- 编程入门
  14. pandasDataframe模块
  15. 微信公众号推广分享二维码,关联扫码关注的客户
  16. [- 多媒体 -] OpenGLES3.0 接入视频实现特效 - 引言
  17. Python基础学习笔记-4.组合数据类型
  18. 游戏鼠标的dpi测试软件,高DPI无用?一分钟测试你所需的鼠标DPI
  19. 马云:大数据时代_最重要的是做最好的自己
  20. vue3 操作修改数据

热门文章

  1. [推荐]网店代销的卖家,你的宝贝名称修改了吗?
  2. 我开发的内部ORM(一)数据库组件
  3. mysql端口隐藏_修改MySQL端口以及出现的问题
  4. centos samba 看不到共享目录_linux入门系列--文件共享之Samba和NFS
  5. 拓端tecdat|R软件SIR模型网络结构扩散过程模拟
  6. 拓端tecdat|R语言对NASA元数据进行文本挖掘的主题建模分析
  7. android碎片按钮,Android 碎片学习 之 如何在碎片调用Activity中的方法来进行赋值操作...
  8. IDEA中使用SQLite数据库
  9. uniapp 如何配置MySQL_uniapp后台api设计(微信user表)
  10. mysql数据库如何新建查询_数据库新建查询