2

我有 2 个表: Marks (studentnum,marks) Student (SNum, SName)

如果我做

选择 SName,marks-avg(marks) from Marks join Student on SNum = studentnum

然后我只返回 1 行。

有没有办法在不为平均值分配变量的情况下返回所有学生姓名列表以及学生分数与平均值的差异(学生分数 - 平均值)?

4

2 回答 2

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
于 2012-07-08T06:51:31.803 回答
0

尝试这个:

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
于 2012-07-08T06:48:03.440 回答