检索出每个班级中分数最低的同学id,姓名,分数,班级名称

tb_student表:
id name
30 d3
49 c
3
51 a3
52 b
3
tb_score表:
stu_id score
30 99
49 79
51 80
52 59
tb_class表:
id name
1 class-1
2 class-2
3 class-1
4 class-2
tb_student_class表
id stu_id class_id
1 30 1
2 49 2
3 51 1
4 52 2
输出
stu_id stu_name class_name score
51 a3 class-1 80
52 b
3 class-2 59


select s.stu_id, stu.name as stu_name, cs.class_name, cs.score from 
(select c.name as class_name, min(s.score) as score from tb_student_class sc left join tb_score s on sc.stu_id = s.stu_id left join tb_class c on sc.class_id = c.id group by c.name) cs 
left join tb_score s on cs.score = s.score left join tb_student stu on s.stu_id = stu.id

用开窗函数,每个表都只用查一次

select t.stu_id, c.name, t.score, d.name class_name
  from (select a.stu_id,
               a.class_id,
               b.score,
               dence_rank() over(partition by a.class_id order by b.score) rk
          from tb_student_class a, tb_score b
         where a.stu_id = b.stu_id) t,
       tb_student c,
       tb_class d
 where t.rk = 1
   and t.stu_id = c.id
   and t.class_id = d.id