SQL: возникают проблемы с перечислением мин, макс, средний, кол - PullRequest
0 голосов
/ 21 мая 2018

[1]: https://i.stack.imgur.com/R5Pzz.png В настоящее время я пытаюсь перечислить min, max, avg и count для каждого assignmentID.код, который я использовал для создания того, что показано на картинке, выглядит следующим образом:

SELECT assignment.assignmentID, assignment.assignmentName, grade.grade

FROM grade 

JOIN assignment ON grade.assignmentID = assignment.assignmentID

Когда я добавляю счетчик min, max, avg, count к функции SELECT, он возвращает результаты только для assignmentID 1. какМогу ли я заставить его сделать это для всех заданий

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Полагаю, вы хотите:

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 голосов
/ 21 мая 2018

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