sql查询问题,想了很久没想出来

来源:百度知道 编辑:UC知道 时间:2024/05/26 20:52:25
有张emp表(员工表)
有name字段 姓名 主键
salary字段 工资
怎样查出工资排行第三的员工
都是先按降序排前3个 然后在升序找第一个
可以直接按升序排前3个 直接拿第一个吗?

WHITE_WIN的回答中为什么是等于=2
要查的是第三条记录啊
事实上等于2查出的就是第三条记录
有点不明白

count(*)是统计行数
它如果等于2的话应该是有2条记录啊

另外带top的sql语句在PL/SQL Developer中查询都出现错误
为什么 用的是oracle数据库

select * from emp where
(select count(1) from emp a where a.salary>emp.salary)=2
这样就更容易理解了:
select *,
(select count(1) from emp a where a.salary>=emp.salary) AS 工资排位
from emp where
(select count(1) from emp a where a.salary>=emp.salary)=3

这个很简单
select 1 *(
(select emp.*,wownum row
from
emp
where rownum<4
order by salary desc

) a
where row<2
order by salary

oracle是不支持top语句的,你可以用rownum来解决

用惯了SqlServer今天用到了Oracle要写条限制返回到结果集中的行数的语句。SqlServer中用的是Select Top num * from XXX 没想到Oracle不支持Top。经过上网搜索发现Oracle用这样的方式来实现:select * from XXX where rownum<num来实现.

如果不行你再在里面加个子查询.Oracle写起来真累

SELECT TOP 1 * FROM (SELECT TOP 3 * FROM emp ORDER BY salary DESC) AS A ORDER BY salary

先根据工资降序排列查出来前三的,然后默认升序排列查第一个

select top 1 name from emp name in(select name top 3 from emp order by salary desc) order by salary asc