[1]: https://i.stack.imgur.com/R5Pzz.png В настоящее время я пытаюсь перечислить min, max, avg и count для каждого идентификатора assignID. код, который я использовал для создания показанного на картинке, выглядит следующим образом:
SELECT assignment.assignmentID, assignment.assignmentName, grade.grade
FROM grade
JOIN assignment ON grade.assignmentID = assignment.assignmentID
Когда я добавляю в min, max, avg, рассчитывает на функцию SELECT, он возвращает результаты для идентификатора assignID 1. как я могу заставить его сделать это для всех назначений
Я считаю, что вы хотите:
SELECT a.assignmentID, a.assignmentName,
COUNT(*) as numgrades, MIN(g.grade), MAX(g.grade), AVG(g.grade)
FROM assignment a JOIN
grade g
ON g.assignmentID = a.assignmentID
GROUP BY a.assignmentID, a.assignmentName;
В вашем запросе отсутствовали функции GROUP BY
и агрегации. Это предполагает, что grade
является числовым, поэтому AVG()
имеет смысл.
Обратите внимание, что я также представил псевдонимы таблиц, поэтому запрос легче писать и читать.
Это потому, что вы не группируете запись назначения. Используйте group by
для выполнения агрегации по каждому заданию:
select assignment.assignmentID, assignment.assignmentName,
count(*) as gradeCount, avg(grade.grade) as avgGrade,
min(grade.grade) as minGrade, max(grade.grade) as maxGrade
from assignment, grade
where assignment.assignmentID = grade.assignmentID
group by assignment.assignmentID, assignment.assignmentName
min()
,max()
и т. Д.).