我想从db获得学生名单,每个班级都有学生姓名的最大号码。使用MySQL DB。获取每个班级中最大号码的学生列表
我有一个学生,班级,结果(与不同年份的结果)
表结构的学生(student_id数据,student_name,类标识码,地址),类(类标识码,CLASS_NAME),结果如下表(result_id,student_id数据,今年,引号)
,我需要列出像
Student Name class Marks
Jon A-1 800
Steve B-1 789
我想从db获得学生名单,每个班级都有学生姓名的最大号码。使用MySQL DB。获取每个班级中最大号码的学生列表
我有一个学生,班级,结果(与不同年份的结果)
表结构的学生(student_id数据,student_name,类标识码,地址),类(类标识码,CLASS_NAME),结果如下表(result_id,student_id数据,今年,引号)
,我需要列出像
Student Name class Marks
Jon A-1 800
Steve B-1 789
编辑更正后的代码,评论是正确的
尝试在代码这个SQL Fiddle link
你可以使用一个子查询,每类最高分来筛选学生:
select s.student_name
, c.class_name
, r.marks
from results r
join student s
on r.student_id = s.student_id
join class c
on c.class_id = s.class_id
where r.result_id =
(
select r2.result_id
from student s2
join results r2
on s2.student_id = r2.student_id
where c.class_id = s2.class_id
order by
r2.marks desc
limit 1
)
这是另一种选择,但使用GROUP BY和MAX更清晰,你不觉得吗? – Yaroslav
select s1.student_name, c1.class_name, r1.marks
from student s1, class c1, results r1,
(select s2.class_id, max(r2.marks) marks
from results r2, student s2
where r2.student_id = s2.student_id
group by s2.class_id) agg
where r1.marks = agg.marks
and r1.student_id = s1.student_id
and s1.class_id = c1.class_id
and s1.class_id = agg.class_id
我猜你错过了包括完整表结构。 –
更多详细信息请 – S3ddi9
如何包括一些更多的信息,如:数据库,版本,列,数据,预期结果,你已经试过 –