Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wyrażenie nie agregujące <expression> jest oparte na kolumnach, które nie uczestniczą w klauzuli GROUP BY.
Dodaj kolumny lub wyrażenie do GROUP BY, zagreguj wyrażenie lub użyj <expressionAnyValue>, jeśli nie obchodzisz, które wartości w grupie są zwracane.
Parametry
-
wyrażenie: wyrażenie nie agregujące, nie grupujące na liście
SELECT. -
expressionAnyValue:
expressionopakowana w funkcję agregacji any_value().
Wyjaśnienie
W kontekście zapytania z klauzulą GROUP BY lokalne odwołania do kolumn na liście SELECT muszą być następujące:
- Używane jako argument funkcji agregującej lub
- Część wyrażenia, które pasuje do wyrażenia w klauzuli
GROUP BY.
Odwołanie do kolumny lokalnej to kolumna, która została rozpoznana jako odwołanie do tabeli w klauzuli FROM zapytania.
Innymi słowy: odwołania do kolumn muszą być częścią kluczy grupowania lub muszą być częścią agregacji.
Usługa Azure Databricks dopasuje wyrażenia do najlepszych wysiłków: na przykład rozpozna: SELECT c1 + 5 FROM T GROUP BY 5 + c1 jako wyrażenia matematyczne.
Ale SELECT c1 FROM T GROUP BY c1 + 5 nie pasuje.
Łagodzenia
Ograniczenie ryzyka błędu zależy od przyczyny:
Czy pominięto kolumnę grupowania?
Dodaj
expressionlub odpowiednie wyrażenieexpressiondo klauzuliGROUP BY.Czy odwołanie do kolumny w wyrażeniu
GROUP BYróżni się odepression?Dopasuj wyrażenie na liście
SELECTlub uprość wyrażenieGROUP BY.Czy brakuje agregacji?
Zawijaj odwołanie do kolumny za pomocą funkcji agregującej. Jeśli chcesz tylko reprezentatywną wartość z grupy, możesz użyć any_value (epression).
Przykłady
-- 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