سؤال

لقد قمت بتحميل بيانات الاختبار التالية:

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

مع المخطط: name:STRING,age:INTEGER,gender:STRING ولقد أكدت أن صف Jimbo يعرض قيمة فارغة لعمود "العمر" في أداة متصفح BigQuery > مجموعة البيانات الخاصة بي > التفاصيل > قسم المعاينة.

عندما أقوم بتشغيل هذا الاستعلام:

SELECT AVG(age) FROM [peterprivatedata.testpeople]

أحصل على 24.75 وهذا غير صحيح.كنت أتوقع 33 لأن وثائق AVG يقول "لا يتم تضمين الصفوف ذات القيمة NULL في الحساب."

هل أفعل شيئًا خاطئًا أم أن هذا خطأ معروف؟(لا أعرف ما إذا كانت هناك قائمة مشكلات عامة للتحقق منها).ما هو الحل الأسهل لهذا؟

هل كانت مفيدة؟

المحلول

هذا خطأ معروف حيث نقوم بإجبار القيم الرقمية الفارغة على 0 عند الاستيراد.نحن نعمل حاليًا على حل المشكلة.هذه القيم يفعل ومع ذلك، تظهر على أنها غير محددة (والتي تختلف لأسباب مختلفة عن القيمة الخالية)، لذا يمكنك التحقق من وجود 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top