注册 登录
编程论坛 Oracle论坛

[求助]这种查询该怎么写啊??

以后每天来这里 发布于 2007-04-20 21:45, 3321 次点击
create table emp (
id number,
dept_id number,
salary number
);

id dept_id salary
1 1 1300
2 1 1200
3 1 1000
4 1 1100
5 2 1500
6 2 1300
7 2 1600
8 2 1300
9 2 1100
查询每个部门的前3甲工资,查询后:
id dept_id salary
1 1 1300
2 1 1200
4 1 1100
7 2 1600
5 2 1500
6 2 1300
8 2 1300
工资重复的话都要显示,部门数不止1,2,要通用,谢谢,我想了一下午了,还是想不出

[此贴子已经被作者于2007-4-20 21:45:43编辑过]

8 回复
#2
棉花糖ONE2007-04-20 22:18

[此贴子已经被作者于2007-4-20 22:22:39编辑过]

#3
liuye2007-10-24 22:51
select id,dept_id,salary,rank() over(partition by dept_id order by salary desc) rank from emp
#4
fengyiyang2008-03-30 23:02
select id,dept_id,salary,row_number() over(partition by dept_id order by salary desc)as rank from emp
#5
makebest2008-04-27 22:06
希望这个能用在ORACLE中,在SQLSERVER中测试通过
select id,dept_id,salary from emp t1
where (select count(*) as rk from emp t2 where t1.dept_id=t2.dept_id and t1.salary<t2.salary)<=2
#6
zhaoyandyx2008-05-08 10:47
试试这个
SELECT * FROM (
      SELECT id dept_id salary, DENSE_RANK()
      OVER (
        PARTITION BY dept_id ORDER BY salary DESC
      ) Top3 FROM emp
)
WHERE Top3 <= 3
ORDER BY id ,dept_id, salary DESC
#7
muzhoyto2008-08-28 12:56
只有makebest的正确
1