2015-02-05 38 views
0

我使用SQL-server.I有一個表,看起來像內連接VS其他一些方法

StudentName Class score 
Jim   a1  80 
Ann   a1  83 
Bill   a2  90 

我想選擇的學生,其成績是在他/她的班級平均分以上。這裏是我的代碼:

Select a.StudentName 
From Table a 
inner Join Table b 
On a.class=b.class 
where a.score>(select avg(b.score) From b 
group by class); 

內部聯接方法看起來奇怪,me.Is它正確嗎?有沒有更好的方法來達到這個目的?

+0

你有一個表中的所有學生。你爲什麼需要加入?聯接用於組合兩個(或更多)表。 – stupidstudent 2015-02-05 20:21:01

回答

2

你靠近,但你可以限制你的子查詢,並採取了JOIN:

Select a.StudentName 
From Table a 
where a.score > (
    select avg(b.score) score 
    From Table b 
    where b.class = a.class); 
+0

感謝您的回覆。我不需要加入嗎?我應該定義b嗎? – user4441082 2015-02-05 20:26:48

+0

不;你可以通過加入子查詢來做到這一點,但這是更清潔的恕我直言。而b在子查詢中定義。 – 2015-02-05 20:29:07

0

如何:

​​
+0

如果我使用Oracle,我可以使用;請用xxx()定義? – user4441082 2015-02-05 20:28:49

+3

我不知道。您如何在另一個帶有Oracle標籤的問題中提出這個問題? – Elliveny 2015-02-05 20:33:43