求每个部门中薪水最高的前两个人的名字 -----------------------
EMP: 雇员表
-----------------------
Name Null? Type
---------------- -------- --------------
EMPNO NOT NULL NUMBER(4) 雇员编号
ENAME VARCHAR2(10) 雇员姓名
JOB VARCHAR2(9) 工种
MGR NUMBER(4) 经理编号
HIREDATE DATE 入职日期
SAL NUMBER(7,2) 月薪
COMM NUMBER(7,2) 奖金
DEPTNO NUMBER(2) 部门编号
__________________________________
dept: 部门表
Name Null? Type
-------------------- --------------
DEPTNO NOT NULL NUMBER(2) 部门编号
DNAME VARCHAR2(14) 部门名称
LOC VARCHAR2(13) 部门地址想了半天,不知道怎么写。
EMP: 雇员表
-----------------------
Name Null? Type
---------------- -------- --------------
EMPNO NOT NULL NUMBER(4) 雇员编号
ENAME VARCHAR2(10) 雇员姓名
JOB VARCHAR2(9) 工种
MGR NUMBER(4) 经理编号
HIREDATE DATE 入职日期
SAL NUMBER(7,2) 月薪
COMM NUMBER(7,2) 奖金
DEPTNO NUMBER(2) 部门编号
__________________________________
dept: 部门表
Name Null? Type
-------------------- --------------
DEPTNO NOT NULL NUMBER(2) 部门编号
DNAME VARCHAR2(14) 部门名称
LOC VARCHAR2(13) 部门地址想了半天,不知道怎么写。
select emp.ename
from emp,dept
where emp.deptno= dept.deptno
and emp.empno in(select empno
from emp e,dept d
where e.deptno= d.deptno
and d.deptno =dept.deptno
and rownum<3 order by emp.sal desc )
group by dept.deptno
order by emp.sal desc;
但是子查询我有点不明白。能解释一下思路吗。
select dense_rank() over(partition by emp.deptno order by sal desc) as den,
emp.ename,
emp.deptno,
emp.sal
from emp ) a
where a.den < 3这些就可以啦,楼主试试看
感觉还是用rank()
不是很明白 学习
主要是看你想如何取
如果严格要求只取两个人,则要用row_number
如果只要示工资前两高的人,则用dense_rank比较合适