十三、Oracle学习笔记:decode函数、排序函数和高级分组函数
一、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函数、排序函数和高级分组函数相关推荐
- 【Java】Java学习笔记(2)——Java面向对象基础作业函数题
本人私人博客:Megalomania,大部分文章会现在博客上传,有不足之处欢迎指正. 学校小学期Java课程的练习题,留个档便于以后需要时候有例子可以回忆,写的烂的地方请多多包含 1.求两个数值之和 ...
- python eval 入门_Python学习笔记整理3之输入输出、python eval函数
Python学习笔记整理3之输入输出.python eval函数 来源:中文源码网 浏览: 次 日期:2018年9月2日 Python学习笔记整理3之输入输出.python eval函数 ...
- r语言c函数怎么用,R语言学习笔记——C#中如何使用R语言setwd()函数
在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//") > setwd("e:\桌面\") > ...
- Oracle学习笔记(最重要的是PL/SQL编程)
一:Oracle认证,与其它数据库比较,安装 Oracle安装会自动的生成sys用户和system用户: (1) sys用户是超级用户,具有最高权限,具有sysdba角色,有create databa ...
- 在大量数据迁移期间oracle学习笔记
在数据迁移期间oracle学习笔记 0主键(自增) 1用户代码 2区域代码 3承保公司代码 4理赔编码 5投保确认码 6案件状态 7案件进展 8重开案件进展 9转换后案件状态 需求分析: 1.根据上述 ...
- oracle update单引号,Oracle学习笔记:update的字段中包括单引号
平时update的时候直接更改字段内的值,例如: update table_temp set name = 'Hider' where id = 100; 但更新后的值中包括单引号,则不能按以上方式进 ...
- [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)
原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...
- oracle:oracle学习笔记(四)循环、光标、异常、瀑布模型
oracle学习笔记:循环.光标.异常 文章目录 打印Hello World 定义基本变量 引用型变量(单行)` my_name emp.ename%type ` 记录型变量(多行) `emp_rec ...
- Oracle学习笔记---(一)
Oracle学习笔记---(一) 一 1.Oracle简介 Oracle是以高级结构化查询语言(SQL)为基础的大型关系数据库:是一个对象关系数据库管理系统(ORDBMS).它提供了关系数据库 ...
- Oracle学习笔记(七)——分组统计查询
Oracle学习笔记(七)--分组统计查询 基础统计函数的使用 分组统计操作的实现,结合多表查询使用分组统计 常用统计函数 COUNT(*|[DISTINCT]字段) MAX(字段,日期或数字) MI ...
最新文章
- HDU 4540 威威猫系列故事――打地鼠(DP)
- 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词
- Spock 1.2 –轻松进行集成测试中的Spring Bean模拟
- IDEA快捷键eclipse版(有自定义部分)
- 黑龙江工程学院计算机系有几个门,黑龙江工程学院本科专业设置一览表
- Flask自定义错误页面的方法
- nginx动静分离配置_Nginx动静分离配置实例
- mongodb用户管理和服务安装
- Java -- IO
- saiku 展示优化
- 字符编码笔记:ASCII,Unicode和UTF-8(转)
- AcWing 895. 最长上升子序列(LIS朴素做法)
- linux系统编程 -- 编程入门
- pandasDataframe模块
- 微信公众号推广分享二维码,关联扫码关注的客户
- [- 多媒体 -] OpenGLES3.0 接入视频实现特效 - 引言
- Python基础学习笔记-4.组合数据类型
- 游戏鼠标的dpi测试软件,高DPI无用?一分钟测试你所需的鼠标DPI
- 马云:大数据时代_最重要的是做最好的自己
- vue3 操作修改数据
热门文章
- [推荐]网店代销的卖家,你的宝贝名称修改了吗?
- 我开发的内部ORM(一)数据库组件
- mysql端口隐藏_修改MySQL端口以及出现的问题
- centos samba 看不到共享目录_linux入门系列--文件共享之Samba和NFS
- 拓端tecdat|R软件SIR模型网络结构扩散过程模拟
- 拓端tecdat|R语言对NASA元数据进行文本挖掘的主题建模分析
- android碎片按钮,Android 碎片学习 之 如何在碎片调用Activity中的方法来进行赋值操作...
- IDEA中使用SQLite数据库
- uniapp 如何配置MySQL_uniapp后台api设计(微信user表)
- mysql数据库如何新建查询_数据库新建查询