简体   繁体   中英

Combining two SQL Queries together

Below is a SQL query which calculates the average results from all students on the modules that a selected student has signed up for

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

I then also have the query below which displays a particular students results in each module

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

Is there a way that I could could combine these two queries together so that I could have a table which displays the individual students results as well as the class average.

So I could have a table on my site for the individual user which has;

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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM