没有分组或子查询的平均值

时间:2015-11-20 18:25:12

标签: sql sql-server sql-server-2012 average

我意识到这是一个奇怪的问题,但我想知道这是否可能。

我们说我有一个有年龄和身份证的数据库。我需要将每个ID的年龄与平均年龄进行比较,但如果没有分组或子查询,我无法弄清楚如何做到这一点。

SELECT
ID,
AGE - AVG(AGE)
FROM
TABLE

我试图得到类似上面的内容,但显然这不起作用,因为ID没有分组,但我分组,然后它计算每个组的平均值,而不是表整体而言。如何在没有子查询的情况下获得全局平均值?

3 个答案:

答案 0 :(得分:1)

 SELECT ID,
        AGE -
        AVG(AGE) OVER (partition by ID) as age_2
 FROM Table

我刚读的是全球avg

 SELECT ID,
        AGE -
        AVG(AGE) OVER () as age_2
 FROM Table

答案 1 :(得分:1)

平均年龄的窗口逻辑是:

SELECT ID, AGE - ( AVG(AGE) OVER () )
FROM TABLE;

分区子句中不需要ORDER BY

答案 2 :(得分:0)

  

如何在没有子查询的情况下获得全局平均值?

使用变量。

DECLARE @AvgAge decimal(4,3)
SELECT @AvgAge = AVG(AGE) FROM TABLE
SELECT ID, AGE - @AvgAge [AgeDiff] FROM TABLE