2013-03-11 21 views
0

我在訪問如下表:計算MAX,SUM,AVERAGE從數列(字段)在ACCESS 2013

entity ratingA ratingB ratingC 
    XYZ  0-100 0-100 0-100 
    ABC  0-100 0-100 0-100 

我需要一個查詢做一些簡單的聚合函數(SUM,MAX ,AVE)中的每個實體(字段:ratingA,ratingB,ratingC)中的每3列中,但內建函數只對一個字段同時執行此操作,而不是針對多個字段/列。

+0

請參閱第二個解決方案 – registoni 2013-03-14 06:48:15

回答

0

它實際上沒有自己的解決方案,我發現這裏how do I select AVG of multiple columns on a single row爲MySQL相似,並通過它訪問(因爲沒有發揮作用ISNULL):

(NZ(RatingA, 0) + NZ(RatingB, 0) + NZ(RatingC, 0))/
    (IIF(ISNULL(RatingA), 0, 1) + IIF(ISNULL(RatingB), 0, 1) + IIF(ISNULL(RatingC), 0, 1)) 

我把它作爲一個計算字段在由字段ENTITY分組的新查詢中。

+0

這是對您的問題的更新嗎?或者這樣做爲您的問題提供了答案? – Freakyuser 2013-03-14 07:09:59

+0

這爲我的問題提供瞭解決方案(至少對於最困難的AVERAGE),SUM根本就不是問題。 – registoni 2013-03-20 10:47:48

+0

那麼,如果這是一個答案,如果你接受這個答案,這將有助於幫助其他人尋找相同類型的問題。自我學習和自我回答在這個社區是受歡迎的。 – Freakyuser 2013-03-20 11:12:38

0

我不知道它真正的代碼,但這裏是一些僞:

SELECT RatingA+RatingB+RatingC/3 AS average 
WHERE entity = XYZ 

與GROUP BY的所有實體:

SELECT RatingA+RatingB+RatingC/3 AS average 
GROUP BY entity 

更妙的是:

TABLE 
ENTITY  VALUE RATINGTYPE 
XYZ  7  A 
XYZ  3  B 
XYZ  5  C 
ABC  4  A 
ABC  4  D 

那麼如果你計劃在將來擴展,那麼你有無限的類型。

SELECT rating/count(rating) AS average 
WHERE entity = XYZ 
(AND TYPE = A) #If you want to sort by only one type. 
+0

謝謝,但據我瞭解,這將強制爲每個實體鍵入一個單獨的查詢。有沒有辦法讓所有的實體進行查詢? – registoni 2013-03-11 10:11:55

+0

GROUP BY實體應該這樣做。 – Akdr 2013-03-11 10:55:29

+0

如果解決了這個問題,請標記爲正確。 – Akdr 2013-03-12 06:01:56

1

你真的必須做些什麼才能得到幾個字段的平均值,首先要弄清楚字段可以被填充的方式組合。 ex 3字段可以填充8種方式 1,0,0 - 0,1,0, - 0,0,1 - 1,1,0 - 1,0,1 - 0,1,1 - 1,1, 1 - 0,0,0其中0表示一個空字段,如果所有的字段都被填充,你可以強制和參數來加總字段併除以3然而如果只有2個或一個字段被填充,那麼你必須首先識別null字段,並且不要將它們添加到計算中。例如,如果有兩個空字段,那麼您的平均值=包含值的字段的值。如果兩個字段已滿,那麼您的平均值=兩個字段之和的值除以2等。所以你想要做的是計算該記錄中的空字段,然後從被平均的字段數中減去空字段的數量。總結字段併除以該值:)