0

我有两张桌子

学生_tbl

student_results_tbl

学生_tbl

------------------------------------------------------
student_id | student_name | 
------------------------------------------------------
1            Mark
2            Jhon
3            Michael
4            Steven  
------------------------------------------------------

student_results_tbl

------------------------------------------------------
student_id | course_id | student_mark 
------------------------------------------------------
1            33            100
2            2             50
3            33            200  
4            10            80 
------------------------------------------------------

我的问题,如果只有 course_id 重复并且学生表中的学生姓名基于结果表中生成的学生 id,我想根据具有最高标记的特定课程 id 从结果表中选择所有内容

4

3 回答 3

1

据我了解您的问题,您希望每门课程都获得最高的学生

SELECT  a.*, b.*
FROM    students_tbl a
        INNER JOIN students_results_tbl b
            ON a.student_id = b.student_id
        INNER JOIN
        (
            SELECT  course_ID, MAX(student_mark) max_grade
            FROM    students_results_tbl
            GROUP   BY course_ID
        ) c ON  b.course_id = c.course_id  AND
                b.student_mark = c.max_grade

结果

╔════════════╦══════════════╦═══════════╦══════════════╗
║ STUDENT_ID ║ STUDENT_NAME ║ COURSE_ID ║ STUDENT_MARK ║
╠════════════╬══════════════╬═══════════╬══════════════╣
║          2 ║ Jhon         ║         2 ║           50 ║
║          3 ║ Michael      ║        33 ║          200 ║
║          4 ║ Steven       ║        10 ║           80 ║
╚════════════╩══════════════╩═══════════╩══════════════╝

更新 1

INDEX为了获得更快的性能,请在上添加一个化合物course_id and student_mark

ALTER TABLE students_results_tbl INDEX (course_id, student_mark)

更新 2

SELECT  a.*, b.*
FROM    students_tbl a
        INNER JOIN students_results_tbl b
            ON a.student_id = b.student_id
        INNER JOIN
        (
            SELECT  student_id,
                    course_ID, 
                    MAX(student_mark) max_grade
            FROM    students_results_tbl 
            GROUP   BY student_id, course_ID
        ) c ON  b.course_id = c.course_id  AND
                b.student_ID = c.student_id AND
                b.student_mark = c.max_grade
WHERE   b.course_ID = 33
于 2013-03-11T15:50:53.750 回答
0

也许这个,如果我正确理解你的问题

SELECT MAX(student_mark)
FROM students_results_tbl
WHERE course_id = ???
GROUP BY course_id
HAVING COUNT(course_id) > 1
于 2013-03-11T15:49:45.313 回答
0

此查询将返回所有 course_id 的最大学生标记,其中结果表中有多个记录

SELECT course_id, MAX(student_mark)
FROM students_resultstbl r
GROUP BY course_id HAVING COUNT (r.student_id) > 1
于 2013-03-11T15:50:27.323 回答