1 有一个员工表(S_EMP)有栏位last_name(姓名),salary(薪水),DEPT_ID (部门ID)等
A : 找出公司里收入最高的前三名员工
B : 找出那些工资高于他们所在部门的平均工资的员工2 有一表
学生编号 姓名 科别 分数
1000 张三 语文 79
1000 张三 数学 100
1000 张三 外语 80
1001 李四 语文 83
1001 李四 数学 62
1001 李四 外语 90
如何得出如下表
学生编号 姓名 语文 数学 外语
1000 张三 79 100 80
1001 李四 83 62 90
请自行建立Table并写出上述转换的SQL
A : 找出公司里收入最高的前三名员工
B : 找出那些工资高于他们所在部门的平均工资的员工2 有一表
学生编号 姓名 科别 分数
1000 张三 语文 79
1000 张三 数学 100
1000 张三 外语 80
1001 李四 语文 83
1001 李四 数学 62
1001 李四 外语 90
如何得出如下表
学生编号 姓名 语文 数学 外语
1000 张三 79 100 80
1001 李四 83 62 90
请自行建立Table并写出上述转换的SQL
select * from (select * from s_emp order by salary desc) where rownum<4
select a.* from s_emp a,
(select dept_id,avg(salary) avg_salary from s_emp group by dept_id) b
where a.salary>b.avg_salary and a.dept_id=b.dept_id
select y.学生编号,y.姓名,y.语文,s.数学,e.外语
from
(select a.学生编号,a.姓名,a.分数 语文 from table a where a.科别='语文') y,
(select a.学生编号,a.分数 数学 from table a where a.科别='数学') s,
(select a.学生编号,a.分数 外语 from table a where a.科别='外语') e
where y.学生编号=s.学生编号 and s.学生编号=e.学生编号
工号 姓名 性别 下属员工工号 部门 出生日期 离职日期 工资
Empno Empname Sex Uempno Deptname Birthdate Offdate Salary
A : 建立Table,查询各部门的平均年龄
B : 查询各部门女性年龄最大者的人员数据
C : 查询员工资料,当”离职日期” 为空时,显示“在职”
当”离职日期”<当前日期时,显示“离职”
当”离职日期”>当前日期时,显示“即将离职”
D : 查询员工A的直接或间接下属的人员数据
select deptnmae,avg(trunc(to_number(sysdate-birthdate))/365)
from a
group by deptnameb
select a.*
from a,
(select deptname ,min(birthdate) max
from a
group by deptname
) maxage
where a.deptname=maxage.deptname
and a.birhdate =maxage.maxc
select Empno,empname,sex,Uempno,Deptname,Birthdate,
decode(Offdate,null,'在职',decode(sign(sysdate-offdate),1,'离职',0,'离职',-1,'即将离职')) 在职情况, Salary
from a
其实你这个问题少了个离职日=于当前日的情况d
你的表结构建错了吧,上下属就是父子结构,都是子结构对应父结构的,多个子对应一个父,你这里是倒过来,父结构对应子结构,意味着Uempno字段是多个下属编号组成的
这里应该是上属的编号
如果只有一直下属,你可这样建,如果有多个下属则肯定不行,需要建上属
建上属的查下属查法
select *
from a
start with Empno=领导编号
connect by prior Empno = Uempno查上属查法
select *
from a
start with Empno=员工编号
connect by prior Uempno = Empno
select a.*
from a,
(select deptname ,min(birthdate) max
from a
where sex=女
group by deptname
) maxage
where sex=女 and a.deptname=maxage.deptname
and a.birhdate =maxage.max
a问:
SELECT top 3 * FROM Document order by salary desc这样查询 如果前3名有并列的人 都可以查出来
1题
a问:
SELECT top 3 * FROM Document order by salary desc这样查询 如果前3名有并列的人 都可以查出来
===================================================
兄弟,没玩过ORACLE吧,TOP的写法在ORACLE是没有的,这句去执行,肯定报错的顺便说一下
a
select deptnmae,avg(trunc(to_number(sysdate-birthdate))/365)
from a
group by deptname
这个括号要改一下
a
select deptnmae,avg(trunc((sysdate-birthdate))/365)
from a
group by deptname不过这句最好试验下
select deptnmae,avg(trunc(to_number((sysdate-birthdate))/365))
from a
group by deptname这样出来的岁数都是整数,如果想四舍五入,就把trunc换成round,如果想保留2位小数,就这样写
avg(trunc(to_number((sysdate-birthdate))/365,2))