Как правильно ответить на этот вопрос, используя SQL - PullRequest
0 голосов
/ 29 мая 2020

"Второй отчет представляет полный список студентов с указанием предметов, которые они изучили, их результатов по этому предмету и их средней оценки за взятые единицы.

Требуются следующие столбцы:

student ID,
forename,
surname,
subject ID,
result

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

Общая средняя оценка должна отображаться в конце отчета. "

Я очень новичок в SQL, поэтому я буду очень признателен за любую помощь по синтаксису этого вопроса.

На данный момент я дошел до отображения всех столбцов со всеми учащимися детали, используя:

select student.student_ID
     , student.forename
     , student.surname
     , result.subject_ID
     , result.result 
  from student
     , result;

Но он дает мне все результаты одинаково по любой причине

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

Это должно быть просто для кого-то с базовым * 104 9 * sql знания, которые я себе представляю.

Заранее спасибо

Коннор

ОБНОВЛЕНИЕ: прогресс пи c

Однако при добавлении группы по. кажется, я получаю результаты только для одного класса? Мне нужно сгруппировать по другому признаку? Один класс pi c

Спасибо, ребята, я много часов нахожусь в разногласиях в поисках помощи, и это, по умолчанию, помогает мне намного больше. ура

UPDATE2:

Теперь я получаю это, добавляя ROLLUP, он выглядит хорошо, но я не думаю, что эти средние значения соответствуют каждому отдельному студенту

Извините за то, что так плохо с этим ... Я тупой, 4-я строка вниз для каждого ученика - это среднее значение ... это правильно ... но должно ли это отображаться так?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Вы не указали связь между строками student и result в своем запросе. Таким образом, он просто возвращает каждую комбинацию строк в таблицах - это называется перекрестным произведением или перекрестным соединением.

Вам нужно указать, как строки должны быть объединены в пары, чтобы каждый учащийся отображался только со своими собственными результатами , а не других студентов. Вы делаете это с помощью JOIN с условием ON.

SELECT student.student_ID, student.forename, student.surname, result.subject_ID, result.result 
FROM student
JOIN result ON student.student_ID = result.student_ID

Чтобы получить среднее значение для каждого студента, вам необходимо использовать GROUP BY student.student_ID вместе с функцией агрегирования AVG().

SELECT student.student_ID, student.forename, student.surname, AVG(result.result) AS avg_result
FROM student
JOIN result ON student.student_ID = result.student_ID
GROUP BY student.student_ID

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

SELECT AVG(result) AS avg_result
FROM result

Вы можете получить все результаты в одном запросе, используя опцию WITH ROLLUP.

SELECT student.student_ID, student.forename, student.surname, AVG(result.result) AS avg_result
FROM student
JOIN result ON student.student_ID = result.student_ID
GROUP BY student.student_ID, result.subject_ID WITH ROLLUP

Среднее значение на одного студента будет subject_ID = NULL, общее среднее будет student_ID = NULL.

0 голосов
/ 29 мая 2020

В запросе вы не указываете значение, которое связывает обе таблицы.

Есть ли в таблице результатов ключевой столбец, содержащий идентификатор student_ID?

Тогда запрос должен как минимум указывать что они должны быть равны

Используйте свой запрос как есть и добавьте предложение where.

select 
  student.student_ID, 
  student.forename, 
  student.surname, 
  result.subject_ID, 
  result.result 
from student, result 
where student.student_ID = result.student_ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...