2016-03-01 93 views
0

下面是一個SQL查詢,其計算從所選擇的學生已經註冊了組合兩個SQL查詢一起

SELECT DISTINCT 
    AVG(students_vs_modules.module_result) AS module_average, 
    students_vs_modules.module_id, 
    modules.module_name 
FROM 
    students_vs_modules 
INNER JOIN 
    modules ON students_vs_modules.module_id = modules.module_id 
WHERE 
    (students_vs_modules.module_id IN (SELECT module_id 
             FROM students_vs_modules AS students_vs_modules_1 
             WHERE (user_id = @user_id))) 
    AND (students_vs_modules.module_result <> 0) 
GROUP BY 
    students_vs_modules.module_id, 
    modules.module_name 

我模塊全體學生的平均成績,然後也有低於它顯示一個特定查詢學生成績各模塊

SELECT 
    student_records.f_name, student_records.l_name, 
    modules.module_name, modules.module_id, 
    modules.semester, modules.year, 
    students_vs_modules.module_result, 
    year.year_title 
FROM 
    student_records 
INNER JOIN 
    students_vs_modules ON student_records.user_id = students_vs_modules.user_id 
INNER JOIN 
    modules ON students_vs_modules.module_id = modules.module_id 
INNER JOIN 
    YEAR ON modules.YEAR = YEAR.year_id 
INNER JOIN 
    exam_session ON students_vs_modules.academic_year = exam_session.academic_year 
       AND modules.semester = exam_session.semester 
WHERE 
    (student_records.user_id = @user_id) 
ORDER BY 
    modules.YEAR, modules.semester, modules.module_id 

在有沒有我可以能這兩個查詢結合在一起,這樣我可以有它顯示了個別學生結果的表,以及班級的平均分的方式。

所以我可以在我的網站上爲個人用戶提供一張桌子;

module_id | semester | year | module_result | module_average | 
-------------------------------------------------------------- 
+0

你 「在」 使用的是好奇。我懷疑這應該使用另一個內部聯接來完成。 – Reinderien

回答

1
SELECT student_records.f_name, 
    student_records.l_name, 
    modules.module_name, 
    modules.module_id, 
    modules.semester, 
    modules.year, 
    students_vs_modules.module_result, 
    year.year_title, 
    ModuleAvgs.module_average 
FROM student_records 
INNER JOIN students_vs_modules ON student_records.user_id = students_vs_modules.user_id 
INNER JOIN modules ON students_vs_modules.module_id = modules.module_id 
INNER JOIN (SELECT DISTINCT AVG(students_vs_modules.module_result) AS module_average, 
students_vs_modules.module_id 
FROM students_vs_modules 
INNER JOIN modules ON students_vs_modules.module_id = modules.module_id 
WHERE (students_vs_modules.module_id IN 
    (SELECT module_id 
     FROM students_vs_modules AS students_vs_modules_1 
     WHERE (user_id = @user_id))) 
AND (students_vs_modules.module_result <> 0) 
GROUP BY students_vs_modules.module_id) AS ModuleAvgs 
ON modules.module_id = ModuleAvgs.module_id 
INNER JOIN YEAR ON modules.YEAR = YEAR.year_id 
INNER JOIN exam_session ON students_vs_modules.academic_year = exam_session.academic_year 
AND modules.semester = exam_session.semester 
WHERE (student_records.user_id = @user_id) 
ORDER BY modules.YEAR, 
      modules.semester, 
      modules.module_id; 
+0

謝謝!這工作。無法讓我的頭纏住它,你的回答幫助我瞭解我哪裏出錯了。 – mcclosa

+0

我很高興這有幫助! –