2012-07-08 50 views
0

使用可變我有2個表: 標記(studentnum,馬克) 學生(SNUM,SNAME)減去由平均同一列的列中的值,而無需在ISQL

如果我做

從Marks加入學生SNum = studentnum中選擇SName,marks-avg(標記)

然後我只返回1行。

是否有辦法將所有學生姓名列表以及學生分數與平均分數(學生分數 - 平均分)的差異都返回給學生,而無需爲平均分配變量?

回答

0

你想混合骨料和非集合值。這使用子查詢,但可能有其他選項取決於您的服務器。

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 
+0

謝謝!很好的工作 – user1509652 2012-07-08 07:07:41

+0

如果你想要所有學生的平均分數,然後刪除WHERE子句。 – shawnt00 2012-07-08 07:39:26

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 
+0

不會按studentnum分組找到每個學生的平均分數嗎?不是商標表中整個商標的平均值? – user1509652 2012-07-08 07:21:27

+0

@ user1509652,你是對的,我的回答也是一樣的。我的答案也很容易改變。 – shawnt00 2012-07-08 07:41:36