2012-10-02 77 views
1

我已加載下面的測試數據:在BigQuery瀏覽器name:STRING,age:INTEGER,gender:STRING,我已經證實,金寶行顯示一個空列「時代」:AVG沒有采取空值考慮

name, age,gender 
"John", 33,m 
"Sam", 33,m 
"Julie",33,f 
"Jimbo",, m 

與模式工具> mydataset>細節>預覽部分。

當我運行此查詢:

SELECT AVG(age) FROM [peterprivatedata.testpeople] 

我得到24.75這是不正確。我預計33,因爲documentation for AVG說:「具有NULL值的行不包含在計算中。」

我做錯了什麼或者這是一個已知的錯誤? (我不知道是否有公共問題清單要檢查)。什麼是最簡單的解決方法呢?

回答

1

這是一個已知的錯誤,我們在導入時將空數值強制爲0。我們目前正在進行修復。這些值然而,顯示爲沒有定義(由於各種原因不同於null),所以你可以檢查IS_EXPLICITLY_DEFINED。例如:

SELECT sum(if(is_explicitly_defined(numeric_field), numeric_field, 0))/
     sum(if(is_explicitly_defined(numeric_field), 1, 0)) 
    AS my_avg FROM your_table 

另外,還可以使用另一列代表is_null。那麼查詢將如下所示:

SELECT sum(if(numeric_field_is_null, 0, numeric_field))/
     sum(if(numeric_field_is_null, 0, 1)) 
    AS my_avg FROM your_table 
+0

我知道你在團隊的開發人員,但我沒有看到空數值已強制爲0進口。例如,詳細信息選項卡「預覽」功能將它們顯示爲空,並且該行的IS_EXPLICITLY_DEFINED(age)的計算結果爲false。 –

+0

使用你的建議的解決方法作爲開始我想出了一個不需要額外的導入或列,似乎做的工作︰sum(if(IS_EXPLICITLY_DEFINED(age),age,0))/ sum(if(IS_EXPLICITLY_DEFINED(age ),1,0))as my_avg –

+0

好吧,這是很好的知道...我原來的答案看起來像你自己想出的東西,但後來我認爲你一定是打這個價值脅迫的錯誤,所以我試圖給取而代之的解決方法。 –