SQL: возникают проблемы с перечислением мин, макс, средний, кол

0

[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. как я могу заставить его сделать это для всех назначений

  • 2
    Пожалуйста, укажите DDL таблицы, некоторые примеры данных в виде DML, ожидаемые результаты и фактический запрос, который у вас есть прямо сейчас (с min() , max() и т. Д.).
Теги:
select
max
min

2 ответа

0

Я считаю, что вы хотите:

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() имеет смысл.

Обратите внимание, что я также представил псевдонимы таблиц, поэтому запрос легче писать и читать.

0

Это потому, что вы не группируете запись назначения. Используйте 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню