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名,并显示员工号、成绩
不好意思,小弟分少,只能提供这么多!还望大家支持!谢谢!!! 展开
EMPID NAME DEPID CJ
001 张三 A001 90
002 李四 A001 90
003 王五 A001 80
004 张飞 A002 70
005 刘备 A002 60
006 关羽 A002 50
现要求查出:
各部门的前2名,并显示员工号、成绩
不好意思,小弟分少,只能提供这么多!还望大家支持!谢谢!!! 展开
展开全部
--建立临时视图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);
*******************
昨天有点事情耽搁了,这个应该可以实现你的要求。如果不允许建立临时视图的话,你把这几个临时视图糅进去就可以了。
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);
*******************
昨天有点事情耽搁了,这个应该可以实现你的要求。如果不允许建立临时视图的话,你把这几个临时视图糅进去就可以了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询