目前有如下的表 t_student
name project score
A    语文    90
A    数学    80
A    英语    20
A    生物    50
B    语文    34
B    数学    44
B    英语    55
B    生物    76

找出每个学生最差的两门课程求教啊

解决方案 »

  1.   

    with a1 as (SELECT name, project, row_number() over(group by name, order by score asc) as rn
                  FROM t_student t2 )
    select t1.name, t1.project, t1.score
    from t_studnet t1
    where exists ( select 1 from a1 
                   where a1.name=t1.name 
                   and   a1.project=t1.project
                   and   a1.rn<=2 );
      

  2.   

    高手 有点小问题啊 这个over里面好像不能写group吧
      

  3.   

    经过我在一番确认,这个over里面不可以用group而是使用partition关键字