编程论坛's Archiver

以后每天来这里 发表于 2007-4-20 21:45

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

create table emp (<br>id number,<br>dept_id number,<br>salary number<br>);<br><br>id  dept_id  salary<br>1    1        1300<br>2    1        1200<br>3    1        1000<br>4    1        1100<br>5    2        1500   <br>6    2        1300<br>7    2        1600<br>8    2        1300<br>9    2        1100<br>查询每个部门的前3甲工资,查询后:<br>id  dept_id  salary<br>1     1       1300<br>2     1       1200<br>4     1       1100<br>7     2       1600<br>5     2       1500<br>6     2       1300<br>8     2       1300<br>工资重复的话都要显示,部门数不止1,2,要通用,谢谢,我想了一下午了,还是想不出
[align=right][color=#000066][此贴子已经被作者于2007-4-20 21:45:43编辑过][/color][/align]

棉花糖ONE 发表于 2007-4-20 22:18

<P>顶</P>
[align=right][color=#000066][此贴子已经被作者于2007-4-20 22:22:39编辑过][/color][/align]

liuye 发表于 2007-10-24 22:51

select id,dept_id,salary,rank() over(partition by dept_id order by salary desc) rank from emp

fengyiyang 发表于 2008-3-30 23:02

select id,dept_id,salary,row_number() over(partition by dept_id order by salary desc)as rank from emp

makebest 发表于 2008-4-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

zhaoyandyx 发表于 2008-5-8 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

wysq 发表于 2008-6-11 22:19

刚开始学.我也就看你的问题打的.不知道对不

select * from emp e1
where (
select coun(*) from emp e2 where e2.salary>e1.salary
)<=3;

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.