获得每个老师成绩最低的学生

Get student with the lowest grade per teacher

这是我的表格:

老师:

学生:

测试

一个老师有学生,一个学生有考试

  SELECT
    t.name as teacherName,
    s.name as studentName,
    t.id as teacherID,
    s.id as studentID,
    MIN(tt.grade) as grade
    FROM teacher t
    JOIN student s ON s.`teacher_id` = t.id
    JOIN test tt ON tt.student_id = s.id
    GROUP BY studentID;

所以在这里我得到老师 -> 学生 -> 最低年级(6 行)

我要的是

老师 -> 成绩最低的学生 -> 成绩(2 行)

我能得到

教师 -> 每位教师的最低成绩

但后来学生姓名变得模棱两可,因为我没有按那个分组..

一般的想法是连接到派生的 table,也就是带有别名的子查询。

select yourfields, temp.something, minvalue
from yourtables
join (
select something, min(value) minvalue
from yourtables
group by something
) temp on someTable.something = temp.something
and value = minvalue

你可以算出细节。

SELECT
t.name as teacherName,
s.name as studentName,
t.id as teacherID,
s.id as studentID,
tt.grade
FROM teacher t
JOIN student s ON s.`teacher_id` = t.id
JOIN test tt ON tt.student_id = s.id
JOIN (
    SELECT 
    t.id teacherID, MIN(grade) AS grade
    FROM teacher t
    JOIN student s ON s.`teacher_id` = t.id
    JOIN test tt ON tt.student_id = s.id
    GROUP BY t.id    
) j
ON j.teacherID = t.id AND j.grade = tt.grade;

你需要做一个按老师打分最低的子表,然后加入那个子表。像这样:

select t.name teacher_name, s.name student_name, x.min_grade
from teacher t
join student s on t.id = s.teacher_id
join test ts on s.id = ts.student_id
join (
  select sx.teacher_id, min(tsx.grade) min_grade
  from student sx
  join test tsx on sx.id = tsx.student_id
  group by 1) x on t.id = x.teacher_id and ts.grade = x.min_grade;