فئة الخطأ MISSING_AGGREGATION
يستند التعبير <expression>
غير التجميعي إلى الأعمدة التي لا تشارك في عبارة GROUP BY.
أضف الأعمدة أو التعبير إلى GROUP BY أو قم بتجميع التعبير أو استخدمه <expressionAnyValue>
إذا كنت لا تهتم بأي من القيم داخل مجموعة يتم إرجاعها.
معلمات
- تعبير: تعبير غير تجميعي، تعبير غير تجميعي في
SELECT
القائمة. - expressionAnyValue:
expression
ملفوف في دالة تجميعية any_value().
تفسير
ضمن سياق استعلام مع عبارة GROUP BY ، يجب أن تكون مراجع الأعمدة المحلية في قائمة SELECT :
- مستهلك كوسيطة لدالة تجميعية، أو
- جزء من تعبير يطابق تعبيرا في العبارة
GROUP BY
.
مرجع العمود المحلي هو عمود تم حله إلى مرجع جدول في عبارة FROM الخاصة بالاستعلام.
بمعنى آخر: يجب أن تكون مراجع الأعمدة إما جزءا من مفاتيح التجميع، أو يجب أن تكون جزءا من التجميع.
يطابق Azure Databricks التعبيرات في أفضل جهد: على سبيل المثال سيتعرف على: SELECT c1 + 5 FROM T GROUP BY 5 + c1
كتعبيرات رياضية.
ولكن SELECT c1 FROM T GROUP BY c1 + 5
ليس تطابقا.
التخفيف
يعتمد التخفيف من الخطأ على السبب:
هل فاتتك عمود تجميع؟
أضف
expression
، أو التعبير الفرعي ذي الصلة منexpression
إلىGROUP BY
عبارة .هل مرجع العمود جزء من
GROUP BY
تعبير يختلف عنepression
؟مطابقة التعبير في
SELECT
القائمة أو تبسيطGROUP BY
التعبير.هل تفتقد التجميع؟
قم بتضمين مرجع العمود باستخدام دالة تجميعية. إذا كنت تريد قيمة تمثيلية فقط من المجموعة، يمكنك استخدام any_value (الضغط).
امثله
-- Sample data
> CREATE OR REPLACE TEMPORARY VIEW tasks(name, firstname, task, cost) AS
VALUES ('Smith' , 'Sam' , 'UNPIVOT', 10),
('Smith' , 'Sam' , 'LATERAL', 5),
('Shuster', 'Sally' , 'DELETE' , 7),
('Shuster', 'Sally' , 'GRANT' , 8);
-- `name` and `firstname` are part of the group by coumns, but incomplete
> SELECT name, firstname, sum(cost) FROM tasks GROUP BY firstname || ' ' || name;
[MISSING_AGGREGATION] The expression "name" is neither present in the group by, nor is it an aggregate function.
-- Match the GROUP BY expression
> SELECT firstname || ' ' || name, sum(cost) FROM tasks GROUP BY firstname || ' ' || name;
Sam Smith 15
Sally Shuster 15
-- Break up the GROUP BY expression
> SELECT firstname, name, sum(cost) FROM tasks GROUP BY firstname, name;
Sam Smith 15
Sally Shuster 15
-- Missing grouping column
> SELECT name, firstname, sum(cost) FROM tasks GROUP BY name;
[MISSING_AGGREGATION] The expression "firstname" is neither present in the group by, nor is it an aggregate function.
-- Add the grouping column
> SELECT firstname, name, sum(cost) FROM tasks GROUP BY firstname, name;
Sam Smith 15
Sally Shuster 15
-- Missing aggregate
> SELECT firstname, name, sum(cost), task FROM tasks GROUP BY firstname, name;
[MISSING_AGGREGATION] The expression "task" is neither present in the group by, nor is it an aggregate function.
-- Add an aggregate
> SELECT firstname, name, sum(cost), array_agg(task) FROM tasks GROUP BY firstname, name;
Sam Smith 15 ["UNPIVOT","LATERAL"]
Sally Shuster 15 ["DELETE","GRANT"]
-- Return any task
> SELECT firstname, name, sum(cost), any_value(task) FROM tasks GROUP BY firstname, name;
Sam Smith 15 LATERAL
Sally Shuster 15 DELETE