AVG не принимает во внимание нулевые значения

StackOverflow https://stackoverflow.com//questions/12684102

  •  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
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top