如何在子查询中工作?

时间:2015-11-20 15:36:54

标签: sql sql-server group-by aggregate-functions

在SQL中使用高级聚合函数时,我非常不稳定。我收到了这个问题:

SELECT Name, avg(Value) Mean, Number
From Table1
where Category = 'Time'
group by Name, Number;

它的作用相当明显。但万一,这看起来像:

|  Name  |  Mean | Number |
|:------:|:-----:|:------:|
| Thing1 | 112.6 | 1      |
| Thing2 | 111.9 | 1      |
| Thing1 | 109.1 | 2      |
| Thing2 | 99.4  | 2      |
| Thing1 | 91.8  | 3      |
| Thing2 | 80.1  | 3      |
| Thing1 | 73.7  | 4      |
| Thing2 | 47.2  | 4      |

现在我想获得特定数字的这些平均值的总和。

我的思维过程就是做这样的事情:

SELECT SUM(Mean) Total Mean, Number 
FROM (SELECT Name, avg(Value) Mean, Number
    FROM Table1
    WHERE Category = 'Time'
    GROUP BY Name, Number)
GROUP BY Number;

但是很明显,我得到Incorrect syntax near the keyword 'group'错误。实现此目标的最佳方法是什么,以便我得到一个如下所示的表:

| Total Mean | Number |
|:----------:|:------:|
| 224.5      | 1      |
| 208.5      | 2      |
| 171.9      | 3      |
| 120.9      | 4      |

1 个答案:

答案 0 :(得分:3)

您的派生表缺少别名。

SELECT SUM(Mean) Total Mean, Number 
FROM (SELECT Name, avg(Value) Mean, Number
    FROM Table1
    WHERE Category = 'Time'
    GROUP BY Name, Number) t --alias for the derived table
GROUP BY Number;