2011-06-23 50 views
-1

我们需要从每节课中找到TOP 10的学生(最高分数为500)。嵌套的sql组

实施例:

Section Name Total Score 

    A Paul 499 
    A Gustuv 498 
     ...upto top 10 

    B Henrik 499 
    B John 498 
     ...upto 10 

比方说,它有两个表STUDENT和CLASS。

如何在oracle中使用sql以这种方式显示结果?

+2

后的表名称和类的DDL ..从类 – Chandu

+0

选择部分;从NAME中选择姓名,主题,分数; – ErAB

+0

什么字段将NAME和CLASS表结合在一起? – Chandu

回答

1

尝试...

我没有你的方案来测试....但是,你应该能够得到的总体思路。

with rank_query as (
SELECT section, name, score, 
     RANK() OVER (PARTITION BY section ORDER BY score) score_rank 
FROM myTable 
) 

select * from rank_query where score_rank <= 10; 

谢谢,

杰弗里凯文撬

+0

该查询会失败并显示错误,因为score_rank不是myTable的定义列而是派生列。在不使用where子句的情况下作为内联查询/视图进行查询,并删除GROUP BY子句,因为您使用的是RANK – Chandu

+0

Jeffrey:现在看起来很好.. +1 – Chandu

+0

谢谢。这个想法适用于我:) – ErAB