日期:2014-05-17  浏览次数:20853 次

老生常谈--一个分组查询的问题
表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