#sql #sql-server #tsql
Вопрос:
У меня есть этот запрос, который показывает приведенный ниже результат, я хочу использовать эту отметку и вывести минимальное, максимальное и среднее значение каждого курса и показать его со вторым запросом (приведенным ниже).
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 | -------------------------- ------- ---------------
Это второй запрос
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 | ------------------------- ------------- ----------
Таким образом, он будет в основном показывать минимальное, максимальное и среднее значение каждого курса, пройденного студентами.
Чего я хочу:
------------------------- ------------- ---------- ----- ----- ----- | 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 | ------------------------- ------------- ---------- ----- ----- -----
Примеры данных:
Таблица StdMarks:
------- -------- --------------- | 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 | ------- ---------- ------------ -------
Экзаменационный стол:
-------- -------- ---------- ---------- ------- ---------- ----------- | 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 | -------- -------- ---------- ---------- ------- ---------- -----------
Таблица Курсов:
---------- --------------------------- ---------- | CourseID | CourseName | Semester | ---------- --------------------------- ---------- | 1 | Calculus - 1 | 1 | | 2 | Business Communications | 1 | | 3 | Introduction To Computing | 1 | ---------- --------------------------- ----------
Семестровая таблица:
------- ------------ | SemID | SemName | ------- ------------ | 1 | Spring2020 | | 2 | Summer2020 | ------- ------------
Таблица Учителей:
----------- ------------- | TeacherID | TeacherName | ----------- ------------- | 2 | Dr. Ahmed | | 3 | Dr. Khalid | ----------- -------------
Комментарии:
1. Вам нужно показать примерные данные и желаемые результаты. Ни одна из приведенных выше данных не включает минимальное, максимальное среднее значение.
2. Если бы вы добавили свои примеры данных в формате DDL DML, нам было бы намного проще помочь.
3. Я обновил его образцами данных, я хочу использовать функции MIN, MAX и AVG в столбце MarksObtained, которого я достиг в первом запросе, который я написал выше. Но я хочу объединить этот запрос со вторым, чтобы он показывал МИНИМАЛЬНОЕ, МАКСИМАЛЬНОЕ и среднее значение каждого курса. В принципе, если в студенческом удостоверении 1 10 баллов по математике, а в студенческом удостоверении 2 20 баллов по математике, то перед математикой будет отображаться Максимум 20, минимум 10, в среднем 15 баллов.
4. Могу ли я получить ссылку, чтобы посмотреть, как будет выглядеть образец DDL DML
5. Его инструкции create table, insert в таблицу, которые создают и заполняют некоторые таблицы для тестирования.
Ответ №1:
Я думаю, что вы хотите использовать group by
для использования агрегатных функций следующие:
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
Комментарии:
1. Это дало мне результат, но я просто не уверен, что он точен, потому что все это просто «20» придется проверить. Спасибо
2. Да, обычно вы создаете тестовые данные, которые подтверждают, что любые вычисления работают.
3. эй, это действительно сработало. Спасибо.