获得每个老师成绩最低的学生
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;
这是我的表格:
老师:
学生:
测试
一个老师有学生,一个学生有考试
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;