oracle分析函数是对分组后的数据进行排序
这里用emp表和dept表做例子。
题目:求每个部门工资在前四名的员工信息
有三种情况:
1.用rank(),排名不连续,跳跃性。
select * from(
select e.*,
rank() over (partition by e.deptno order by e.sal desc) drank
from emp e) where drank<=3
数据结果:
2.使用dense_rank(),排名连续
select * from(
select e.*,
dense_rank() over (partition by e.deptno order by e.sal desc) drank
from emp e) where drank<=4
数据结果
3.使用 row_number()。排名相同则按员工编号升序。连续。
select * from(
select e.*,
row_number() over (partition by e.deptno order by e.sal desc,e.empno asc) drank
from emp e) where drank<=4
数据结果
总结,sql server也有这样的函数。
插一句:行转列参考:[url]http://www.iteye.com/topic/1112111[/url]
下面给出一个通用的写法,不用数据库自己提供的函数。不过没有分析函数这么方便
select * from 表名 a where (select count(1) from 表名 where 分组字段=a.分组字段
and 排序字段>=a.排序字段)<=每组前几名 order by 分组字段 ,
排序字段desc
select * from(
select deptno,sal
,(select count(*) from emp where deptno=e.deptno and sal>=e.sal) rk
from emp e
order by deptno,sal desc) where rk<=5;
--一个行转列的例子,使用decode函数
如
student subject grade
---------------------------
student1 语文 80
student1 数学 70
student1 英语 60
student2 语文 90
student2 数学 80
student2 英语 100
……
转换为
语文 数学 英语
student1 80 70 60
student2 90 80 100
--sql语句
select student,sum(decode(subject,'语文', grade,null)) "语文",
sum(decode(subject,'数学', grade,null)) "数学",
sum(decode(subject,'英语', grade,null)) "英语"
from table
group by student
- 大小: 59.3 KB
- 大小: 70.6 KB
- 大小: 63.8 KB
分享到:
相关推荐
作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...
可以使用一个函数,将变量 name 中的姓和名分开就可以了,但是有一点需要注意,这个函数是不能作用在索引列上。下面是 SQL 查询脚本:select * from employee where first_name = SUBSTR('&&name',1,INSTR('&&name',...
第一部分 ORACLE系统优化基本知识 23 第1章 ORACLE结构回顾 23 §1.1 Oracle数据库结构 23 §1.1.1 Oracle数据字典 23 §1.1.2 表空间与数据文件 24 §1.1.3 Oracle实例(Instance) 24 §1.2 Oracle文件 26 §1.2.1...
导入/导出是ORACLE幸存的最古老的两个命令行工具,其实我从来不认为Exp/Imp是一种好的备份方式,正确的说法是Exp/Imp只能是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取,检测逻辑和物理...
341 实例243 设置“显示 属性”窗体 342 实例244 列出注册表指定项下全部键值 343 8.2 系 统 设 置 344 实例245 隐藏、显示桌面图标 345 实例246 隐藏驱动器 345 实例247 禁用运行...
下面我们将通过一个具体的例子来详细探讨如何在 SQL Server 中使用交叉表,以及在实际操作过程中可能会遇到的一些小问题。 #### 1. 创建临时表和插入数据 首先,我们需要创建一个临时表 `#mpsl` 并向其中插入一些...
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C: INTERSECT 运算符 INTERSECT 运算符通过只包括 ...
实例128 获取数组中最后一个元素 158 实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 ...
实例128 获取数组中最后一个元素 158 实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 ...
Java 5.0,代号Tiger,是Java发展历程中的一个重要里程碑,它引入了许多创新特性,极大地提升了开发效率和代码质量。在这个版本中,Oracle(当时的Sun Microsystems)为Java平台带来了许多新功能,旨在增强其灵活性...
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C: INTERSECT 运算符 INTERSECT 运算符通过只包括 ...
7. **多线程**:Java内置了对多线程的支持,允许一个程序同时执行多个任务。通过继承Thread类或实现Runnable接口,可以创建并运行线程。 8. **输入/输出流(I/O Stream)**:Java的I/O流库提供了一套强大的机制,...
C#的一个网页游览的例子 C++自绘窗体的完整代码 注释非常详细,相信会帮助大家设计好自己的个性窗体。 C++_Primer_第4版_中文+英文 原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制...
C#的一个网页游览的例子 C++自绘窗体的完整代码 注释非常详细,相信会帮助大家设计好自己的个性窗体。 C++_Primer_第4版_中文+英文 原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制...
C#的一个网页游览的例子 C++自绘窗体的完整代码 注释非常详细,相信会帮助大家设计好自己的个性窗体。 C++_Primer_第4版_中文+英文 原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制...
C#的一个网页游览的例子 C++自绘窗体的完整代码 注释非常详细,相信会帮助大家设计好自己的个性窗体。 C++_Primer_第4版_中文+英文 原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制...
C#的一个网页游览的例子 C++自绘窗体的完整代码 注释非常详细,相信会帮助大家设计好自己的个性窗体。 C++_Primer_第4版_中文+英文 原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制...
`LIMIT`后面可以跟一个数字表示返回的结果数量,或者跟两个数字,第一个数字表示偏移量,第二个数字表示返回的结果数量。 - **ORDER BY关键字**:虽然`ORDER BY`可以用来排序结果集,但它不能实现分页效果。 - **...