2015-03-03 120 views
2

有人可以帮我查询这个的平均值吗?SQL Server的平均查询

我有这张桌子。

teacher | class | students | rating 
----------------------------------- 
    T1  1  001  6 
    T1  1  002  6 
    T1  2  003  1 
    T1  3  004  1 
    T2  1  001  6 
    T2  1  002  6 
    T2  2  003  1 
    T2  3  004  1 

如果我这样做Select teacher, class, avg(rating) from table group by teacher, class然后我得到这样的:

teacher | class | rating 
------------------------ 
    T1  1  6 
    T1  2  1 
    T1  3  1 
    T2  1  6 
    T2  2  1 
    T2  3  1 

我想要做的是通过teacher得到这一结果的平均rating和组它是:

teacher | rating 
------------------------ 
    T1  2.66667 
    T2  2.66667 

,因为如果我做Select avg(rating) from table group by teacher,我得到

teacher | rating 
------------------------ 
    T1  3.5 
    T2  3.5 
+1

我已经给出了答案,同样的问题,几个小时前,然后问题删除了?为什么? – 2015-03-03 11:38:27

+0

平均而言,并不是一个有效测量值 – 2015-03-04 05:42:24

回答

2

你可以这样做:

SELECT teacher,avg(avgrating) as avgrating 
FROM 
(Select teacher, class, avg(rating) avgrating 
from TableName 
group by teacher, class) Temp 
GROUP BY teacher 

结果:

TEACHER AVGRATING 
T1  2.666666 
T2  2.666666 

样品结果SQL Fiddle

OR:

SELECT T1.teacher,avg(T2.avgrating) as rating 
FROM TableName T1 JOIN 
(SELECT teacher,class,avg(rating) as avgrating 
FROM TableName T2 
GROUP BY teacher,class) T2 ON T1.teacher=T2.teacher 
GROUP BY T1.teacher 

SQL Fiddle

+0

我的确在想这件事。我只是想知道是否有另一种方式,而不是使用嵌套选择 – akoxi 2015-03-03 13:03:52

+0

@akoxi:我已经编辑我的答案与另一个解决方案使用连接。两者基本相同。您将不得不使用内部查询来获得所需的结果。 – 2015-03-04 05:42:07

1

使用嵌套查询:

select teacher , avg(avgr) from 
(Select teacher, class, avg(rating) avgr from table group by teacher, class) qry 
group by teacher