TABLE:A (科目,分数)数学,80
语文,70
数学,90
数学,60
数学,100
语文,88
语文,65
语文,77现在我想要的结果是:(即想要每门科目的前3名的分数)
数学,100
数学,90
数学,80
语文,88
语文,77
语文,70

解决方案 »

  1.   

    select * from (select rank() over(partition by 科目 order by 分数 desc) rk,a.* from a) t
    where t.rk<=3;
      

  2.   

    利用聚合函数rank()是一个不错的解决办法。
    rank()的语法:
    RANK ( expr [, expr]... ) WITHIN GROUP
    ( ORDER BY 
      expr [ DESC | ASC ] [NULLS { FIRST | LAST }]
      [, expr [ DESC | ASC ] [NULLS { FIRST | LAST }]]...
    )