2015-02-05 81 views
0

我使用SQL-server.I有一个表,看起来像内连接和AVG()函数

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

我想选择的学生,其成绩是在他/她的班级平均分以上。这里是我的代码:

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

我想可能有一些问题“其中的A.class = b.class”,是我的内连接方法正确这里好吗?我也可以使用连接吗?

+1

感谢您的回复。这是我正在使用的sql-server, – user4441082 2015-02-05 18:39:52

回答

2

尝试是这样的:

Select a.StudentName, TableAvg.class, a.score 
    From TableA a 
    inner Join (select class, avg(score) as AvgScore 
     From TableA 
     group by class) TableAvg 
    On a.score > TableAvg.AvgScore 
    and a.class = TableAvg.class 

未经测试的代码...

+0

感谢您的回复。 TableAvg.class工作吗? TableAvg是我将它添加到代码中的平均分数 – user4441082 2015-02-05 18:48:04

+0

。 – tember 2015-02-05 18:54:12

+0

如果你觉得它解决了你的困境,请标记为答案 – tember 2015-02-05 19:50:18

0

您需要添加Table b(items)SELECT
b.score , b.class

1

的样本数据:

SELECT 'Jim' AS StudentName, 'A1' AS Class, 80 AS Score 
INTO #Temporary 
UNION ALL 
SELECT 'Ann', 'A1', 83 
UNION ALL 
SELECT 'Bill', 'A2', 90 

实际查询(无需连接表两次)

SELECT * 
FROM (
    SELECT StudentName, Class, Score, AVG(CAST(Score AS FLOAT)) OVER(PARTITION BY Class) AS AvgScore 
    FROM #Temporary 
) AS T 
WHERE T.Score >= T.AvgScore