2010-02-04 52 views
0

我有與用戶的表和他們的分數,小數爲1 - 10 表(USER_ID,得分)我也有平均分數的1行查詢(約6)和標準差(約0.5)。我使用的MS Access 2007動態地標記用戶按分數

我希望標記的用戶A,B,C,d,其中:

  • A具有比(平均+ STDEV)高的分數;
  • B的得分低於A,但高於平均水平;
  • C的得分低於平均水平,但高於(平均水平)
  • D的得分低於(平均水平)。

如果我將所有數據導出到Excel,我可以很容易地計算出這些值,並將它們導回數據庫。顯然,這不是最優雅的方式。我想用SQL作爲查詢來做到這一點。結果應該是一個表(USER_ID,標籤)

怎麼會呢?

+0

它是否有助於與重構查詢平均值和STDEV表(A-得分,B-得分,C分數)? 也許,是因爲它可以節省一些打字用+和 - 最終的查詢/ – Gerrit 2010-02-04 10:40:20

回答

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; 
+0

............... – Gerrit 2010-02-04 11:25:24

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