Вычитание значения в столбце по среднему значению того же столбца без использования переменной в ISQL

У меня есть 2 таблицы: Marks (studentnum,marks) Student (SNum, SName)

if I do

Выберите SName, отметки-среднее (отметки) из Marks join Student on SNum = studentnum

то я получаю только 1 строку.

Есть ли способ вернуть весь список имен студентов и разницу между оценкой студента и средней (оценка студента - средняя) без присвоения переменной для средней?


person user1509652    schedule 08.07.2012    source источник


Ответы (2)


Вы хотите смешать совокупные и неагрегированные значения. Здесь используется подзапрос, но могут быть и другие варианты в зависимости от вашего сервера.

SELECT
    SName,
    marks - (SELECT avg(marks) FROM Marks as m2 WHERE m2.studentnum = m.studentnum)
FROM
    Marks as m INNER JOIN
    Student as s
        ON s.SNum = m.studentnum
person shawnt00    schedule 08.07.2012
comment
Если вы хотите получить среднюю оценку по всем учащимся, удалите предложение WHERE. - person shawnt00; 08.07.2012

Попробуй это:

Select s.sname, (m.mark - temp.avg)
From marks m
Inner join (select studentnum, avg(mark) as avg from marks group by studentnum) temp 
On temp.studentnum = m.studentnum
Inner Join students s
On s.snum = m.studentnum
person jjathman    schedule 08.07.2012
comment
Разве группа по номеру студента не найдет среднее значение для каждого студента? Не среднее значение всей оценки из таблицы оценок? - person user1509652; 08.07.2012
comment
@ user1509652, вы правы, и мой ответ сделал то же самое. Мой ответ также легко изменить. - person shawnt00; 08.07.2012