Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Нерегластрирующее выражение <expression> основано на столбцах, которые не участвуют в предложении GROUP BY.
Добавьте столбцы или выражение в GROUP BY, агрегируйте выражение или используйте <expressionAnyValue>, если вам не важно, какое из значений в группе возвращается.
Параметры
-
выражение: не агрегирующее, не группирующее выражение в списке
SELECT. -
expressionAnyValue:
expression, упакованный в агрегатную функцию any_value().
Объяснение
В контексте запроса с предложением GROUP BY локальные ссылки на столбцы в списке SELECT должны быть:
- Используется как аргумент агрегатной функции или
- Часть выражения, которое соответствует выражению в предложении
GROUP BY.
Ссылка на локальный столбец — это столбец, который был разрешен для ссылки на таблицу в предложении FROM запроса.
Другими словами: ссылки на столбцы должны быть частью ключей группировки или частью агрегации.
Azure Databricks осуществляет сопоставление выражений по принципу «выборочное соответствие»: например, он распознает: как подходящие выражения.
Но SELECT c1 FROM T GROUP BY c1 + 5 не совпадает.
Смягчение
Устранение ошибки зависит от причины:
вы пропустили группировочный столбец?
Добавьте
expressionили соответствующее подтекстовое выражениеexpressionв предложениеGROUP BY.Является ли ссылка на столбец частью выражения
GROUP BY, которое отличается отepression?Сопоставьте выражение в списке
SELECTили упростите выражениеGROUP BY.Вы не замечаете, что отсутствует агрегирование?
Оберните ссылку на столбец с агрегатной функцией. Если требуется только репрезентативное значение из группы, можно использовать any_value(expression).
Примеры
-- 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