我试图计算一列的z得分,如下:
select uid, score - avg(score) / stdev(score)
from #scores
group by uid
但是,我收到以下错误。
Msg 8120,Level 16,State 1,Line 1
专栏' #scriss.score'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
但是在聚合函数中使用了明显的分数?此SQL语句适用于Sybase,但不适用于SQL Server。知道如何解决这个问题吗?
谢谢你们
答案 0 :(得分:0)
您收到的错误消息非常清楚,我很惊讶查询在Sybase上运行。您在score
聚合的上下文中自行选择uid
。这没有逻辑意义,因为SQL Server 不清楚哪个 score
要用于每个uid
组(通常可能会有超过一个)。您拨打AVG
和STDEV
的电话很好。作为解决方法,我建议使用AVG
和STDEV
作为分析函数。这将允许访问这些聚合值,但在结果集中包含每一行,因此包括score
的每个值。
SELECT
uid,
(score - AVG(score) OVER (PARTITION BY uid) ) /
STDEV(score) OVER (PARTITION BY uid) score_calc
FROM #scores