我意识到这是一个奇怪的问题,但我想知道这是否可能。
我们说我有一个有年龄和身份证的数据库。我需要将每个ID的年龄与平均年龄进行比较,但如果没有分组或子查询,我无法弄清楚如何做到这一点。
SELECT
ID,
AGE - AVG(AGE)
FROM
TABLE
我试图得到类似上面的内容,但显然这不起作用,因为ID没有分组,但我分组,然后它计算每个组的平均值,而不是表整体而言。如何在没有子查询的情况下获得全局平均值?
答案 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