我在訪問如下表:計算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列中,但內建函數只對一個字段同時執行此操作,而不是針對多個字段/列。
我在訪問如下表:計算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列中,但內建函數只對一個字段同時執行此操作,而不是針對多個字段/列。
它實際上沒有自己的解決方案,我發現這裏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分組的新查詢中。
這是對您的問題的更新嗎?或者這樣做爲您的問題提供了答案? – Freakyuser 2013-03-14 07:09:59
這爲我的問題提供瞭解決方案(至少對於最困難的AVERAGE),SUM根本就不是問題。 – registoni 2013-03-20 10:47:48
那麼,如果這是一個答案,如果你接受這個答案,這將有助於幫助其他人尋找相同類型的問題。自我學習和自我回答在這個社區是受歡迎的。 – Freakyuser 2013-03-20 11:12:38
我不知道它真正的代碼,但這裏是一些僞:
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.
你真的必須做些什麼才能得到幾個字段的平均值,首先要弄清楚字段可以被填充的方式組合。 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等。所以你想要做的是計算該記錄中的空字段,然後從被平均的字段數中減去空字段的數量。總結字段併除以該值:)
請參閱第二個解決方案 – registoni 2013-03-14 06:48:15