【问题标题】:SQL Server Average QuerySQL Server 平均查询
【发布时间】:2015-03-03 11:32:46
【问题描述】:

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

我有这张桌子。

 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

我想要做的是获得该结果的平均 rating 并将其按 teacher 分组,即:

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

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

teacher | rating
------------------------
   T1      3.5
   T2      3.5

【问题讨论】:

  • 几个小时前我已经给出了相同问题的答案,然后问题被删除了?为什么?
  • 平均值通常不是有效的测量值

标签: sql-server average


【解决方案1】:

你可以这样做:

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 中的示例结果。

或:

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.

【讨论】:

  • 我确实想过。我只是想知道是否有另一种方法而不是使用嵌套选择
  • @akoxi:我已经使用加入的另一个解决方案编辑了我的答案。两者基本相同。您将不得不使用内部查询来获得所需的结果。
【解决方案2】:

使用嵌套选择:

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

【讨论】:

    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多