質問
次のテストデータをロードしました:
name, age,gender
"John", 33,m
"Sam", 33,m
"Julie",33,f
"Jimbo",, m
.
スキーマ:name:STRING,age:INTEGER,gender:STRING
と私は、JIMBO行がBigQueryブラウザツール> MyDataSet> Details> Previewセクションの列「AGE」にNULLを表示することを確認しました。
このクエリを実行すると、
SELECT AVG(age) FROM [peterprivatedata.testpeople]
.
私は間違っている24.75を得ます。 avg のドキュメント「NULL値を持つ行」計算に含まれていません。 "
私は何か悪いことをしているか、これは既知のバグですか?(チェックするための公開問題リストがあるかどうかわかりません)。これに対する最も単純な回避策は何ですか?
解決
これは、インポート時にNULL数値を0に強制する既知のバグです。現在修正プログラムに取り組んでいます。ただし、これらの値 do は定義されていない(さまざまな理由で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