组合两个SQL查询一起
问题描述:
下面是一个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 |
--------------------------------------------------------------
答
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
我很高兴这有帮助! –
你 “在” 使用的是好奇。我怀疑这应该使用另一个内部联接来完成。 – Reinderien