I have this query which shows the below result, I want to use this MarksObtained and take out min, max and avg of each course and show it with the second query (have provided below).
select CourseName, StdID, MarksObtained from stdmarks inner join course on course.courseid = stdmarks.examid +--------------------------+-------+---------------+ | CourseName | StdID | MarksObtained | +--------------------------+-------+---------------+ | Digital Logic | 1 | 20 | | Visual Prog | 1 | 20 | | Computer Arch and Design | 1 | 20 | | Digital Logic | 2 | 20 | | Visual Prog | 2 | 20 | +--------------------------+-------+---------------+
This is the second query
select distinct CourseName, TeacherName, SemName from teacher inner join stdcourseteacher on teacher.teacherid = stdcourseteacher.teacherid inner join course on course.courseid = stdcourseteacher.courseid inner join semester on stdcourseteacher.semid = semester.semid +-------------------------+-------------+----------+ | CourseName | TeacherName | SemName | +-------------------------+-------------+----------+ | Business Communications | Dr. Iman | Fall2021 | | Calculus - 1 | Dr. Khalid | Fall2021 | | Calculus - 2 | Dr. Khalid | Fall2020 | +-------------------------+-------------+----------+
So it will basically show min, max and avg of each course achieved by the students.
What I want:
+-------------------------+-------------+----------+-----+-----+-----+ | CourseName | TeacherName | SemName | Min | Max | Avg | +-------------------------+-------------+----------+-----+-----+-----+ | Business Communications | Dr. Iman | Fall2021 | 80 | 20 | 50 | | Calculus - 1 | Dr. Khalid | Fall2021 | 70 | 15 | 45 | | Calculus - 2 | Dr. Khalid | Fall2020 | 85 | 15 | 50 | +-------------------------+-------------+----------+-----+-----+-----+
Sample data:
StdMarks table:
+-------+--------+---------------+ | StdID | ExamID | MarksObtained | +-------+--------+---------------+ | 1 | 9 | 20 | | 1 | 10 | 20 | | 1 | 11 | 20 | +-------+--------+---------------+
StdCourseTeacher Table:
+-------+----------+------------+-------+ | StdID | CourseID | TeacherID | SemID | +-------+----------+------------+-------+ | 1 | 9 | 7 | 6 | | 1 | 10 | 7 | 6 | | 1 | 11 | 2 | 6 | | 2 | 9 | 7 | 6 | | 2 | 10 | 7 | 6 | +-------+----------+------------+-------+
Exam Table:
+--------+--------+----------+----------+-------+----------+-----------+ | ExamID | EvalID | Topic | MaxMarks | SemID | CourseID | TeacherID | +--------+--------+----------+----------+-------+----------+-----------+ | 1 | 3 | Mid-Term | 20 | 6 | 1 | 3 | | 2 | 3 | Mid-Term | 20 | 6 | 2 | 4 | | 3 | 3 | Mid-Term | 20 | 6 | 3 | 7 | +--------+--------+----------+----------+-------+----------+-----------+
Course Table:
+----------+---------------------------+----------+ | CourseID | CourseName | Semester | +----------+---------------------------+----------+ | 1 | Calculus - 1 | 1 | | 2 | Business Communications | 1 | | 3 | Introduction To Computing | 1 | +----------+---------------------------+----------+
Semester Table:
+-------+------------+ | SemID | SemName | +-------+------------+ | 1 | Spring2020 | | 2 | Summer2020 | +-------+------------+
Teacher Table:
+-----------+-------------+ | TeacherID | TeacherName | +-----------+-------------+ | 2 | Dr. Ahmed | | 3 | Dr. Khalid | +-----------+-------------+
Advertisement
Answer
I think you want to use group by
in order to use aggregate functions as follows:
select CourseName, TeacherName, SemName, min(MarksObtained), Max(MarksObtained), avg(MarksObtained) from teacher T inner join CT on CT.teacherid = T.teacherid inner join course C on C.courseid = CT.courseid inner join semester S on S.semid = CT.semid inner join stdmarks M on M.examid = C.courseid group by CourseName, TeacherName, SemName