AVG не принимает во внимание нулевые значения
-
12-12-2019 - |
Вопрос
Я загрузил следующие тестовые данные:
name, age,gender
"John", 33,m
"Sam", 33,m
"Julie",33,f
"Jimbo",, m
.
С схемой: name:STRING,age:INTEGER,gender:STRING
, и я подтвердил, что jimbo ряд показывает нулевой для столбца «Возраст» в инструменте BiagQuery Browser> MyDataset> Детали> Предварительный просмотр Раздел.
Когда я запускаю этот запрос:
SELECT AVG(age) FROM [peterprivatedata.testpeople]
.
Я получаю 24,75, что неверно.Я ожидал 33 из-за того, что Документация для AVG говорит: «Строки с нулевым значениемне включены в расчет. "
Я делаю что-то не так или это известная ошибка?(Я не знаю, есть ли список публичных проблем, чтобы проверить).Какой простейший обходной путь к этому?
Решение
Это известная ошибка, в которой мы пострадаем нулевые числовые значения до 0 на импорт.В настоящее время мы работаем над исправлением.Эти значения делают , однако, отображаются как не определенные (которые по различным причинам отличаются от нулевых), поэтому вы можете проверить is_explyitly_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