Oracle数据库的数据提取(一道面试题)

现有数据:EMPIDNAMEDEPIDCJ001张三A00190002李四A00190003王五A00180004张飞A00270005刘备A00260006关羽A002... 现有数据:
EMPID NAME DEPID CJ
001 张三 A001 90
002 李四 A001 90
003 王五 A001 80
004 张飞 A002 70
005 刘备 A002 60
006 关羽 A002 50
现要求查出:
各部门的前2名,并显示员工号、成绩

不好意思,小弟分少,只能提供这么多!还望大家支持!谢谢!!!
展开
 我来答
奔驰M888
2009-04-13 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1846
采纳率:0%
帮助的人:2710万
展开全部
--建立临时视图1,检索每个部门第一名分数
create or replace view temp_v1 as
select 部门号,max(成绩) as 成绩 from Employee group by 部门号;
--在临时视图1的基础上建立临时视图2,检索第二名分数
create or replace view temp_v2 as
select 部门号,max(成绩) as 成绩 from Employee
where (部门号,成绩) not in (select * from temp_v1)
group by 部门号;
--联合两个临时视图的查询结果,建立临时视图3
create or replace view temp_v3 as
select * from
(select * from temp_v1 union select * from temp_v2)
order by 部门号,成绩;
--建立目标视图
create or replace view VdepEm2 as
select 部门号,员工号,成绩 from Employee
where(部门号,成绩) in (select * from temp_v3);

*******************
昨天有点事情耽搁了,这个应该可以实现你的要求。如果不允许建立临时视图的话,你把这几个临时视图糅进去就可以了。
chenleigod520
2012-11-20
知道答主
回答量:1
采纳率:0%
帮助的人:1565
展开全部
select * from
(
select empid,deptid,cj,row_number()over(partition by t.deptid order by cj desc )sum from empinfo t
)where sum<=2;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式