我有一张桌子上有用户及其得分,十进制数字为1 - 10。 表(user_id,得分)我还有1行查询,得分平均值(约6)和标准差(约0.5)。我使用MS Access 2007。
我想标记用户A,B,C,D,其中:
如果我将所有数据导出到Excel,我可以轻松地计算这些值,并将它们导回到数据库中。显然,这不是最优雅的方式。我想用SQL作为查询来做这件事。结果应该是表(user_id,label)
但是怎么样?
答案 0 :(得分:2)
您可以使用交叉联接将用户加入到1行统计信息查询中。然后你可以使用嵌套的iif来计算成绩。
像这样......
SELECT users.*,grade.*
,iif(users.score>grade.high,"A",iif(users.score>grade.average,"B",iif(users.score>grade.low,"C","D"))) as label
FROM (SELECT round(avg(users.score)-stdev(users.score),1) as low
,round(avg(users.score),1) as average
,round(avg(users.score)+stdev(users.score),1) as high
FROM users) AS grade, users;
答案 1 :(得分:0)
IIF成功了。
我采用了平均分数的查询来添加最小的A,B和C分数
Table(avg,stdev,Ascore,Bscore,Cscore) as averages
最终查询看起来像
SELECT user.Id, user.avgScore,
IIf(avgScore>averages.Ascore,"A",
IIf(avgScore>averages.Bscore,"B",
IIf(avgScore>averages.Cscore,"C","D"))) AS label
FROM averages, users