0

私は2つのテーブルを持っています

student_tbl

student_results_tbl

student_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

このクエリは、結果テーブルに複数のレコードがある場合、最大学生マークを持つすべての 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 に答える
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 に答える