老生常谈--一个分组查询的问题
表1.Employee:
EID Name Department Job Email Password
10001 李明 SBB
10003 李筠平 LUK
11045 李洁 SBB
10044 胡斐 MTD
10009 徐仲刚 SBB
10023 李燕 SBB
20460 陆明生 MTD
20078 张青 MMM
20001 李立 LUK
表2.Training
CourseID EID Course Grade TOrder
1 10001 T-SQL 60
3 11045 Oracle 71
2 20460 Java 34
1 10003 T-SQL 59
3 10001 Oracle 90
2 20001 Java 12
2 20078 Java 78
2 10003 Java 78
3 30001 Oracle 71
3 20048 Oracle 36
列出所有各课成绩最高的员工信息,要求显示EID、Name、Department、Course、Grade(Oracle)
弄了半天,没弄出来..查了一些帖子也没有找到解决的办法.请大侠相助
------解决方案--------------------用oracle的分析函数试试,应该可以实现
partition by 。。。 order by 。。。
------解决方案--------------------我测试是成功的,你试试看~~~
========================sql==========================
select ee.eid,ee.name,ee.department,zz.course,zz.grade
from (select tt.*,rank() over(partition by tt.CourseID,tt.Course order by tt.Grade desc) as rk
from Training tt
)zz,
Employee ee
where zz.rk = 1
and ee.eid = zz.eid;
======================result=========================
EID NAME DEPARTMENT COURSE GRADE
---------- ------------ ---------- ------ ----------
10001 李明 SBB T-SQL 60
20078 张青 MMM Java 78
10003 李筠平 LUK Java 78
10001 李明 SBB Oracle 90