Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Neagregační výraz <expression> je založený na sloupcích, které nejsou zahrnuty v klauzuli GROUP BY.
Přidejte sloupce nebo výraz do GROUP BY, agregujte výraz nebo použijte <expressionAnyValue>, pokud nezajímáte, které hodnoty v rámci skupiny se vrátí.
Parametry
-
výraz: Neagregující, neseskupující výraz v seznamu
SELECT. -
expressionAnyValue:
expressionzabalený v agregační funkci any_value().
Vysvětlení
V rámci dotazu obsahujícího klauzuli GROUP BY musí být odkazy na místní sloupce v seznamu SELECT:
- Používáno jako argument agregované funkce nebo
- Část výrazu, který odpovídá výrazu v klauzuli
GROUP BY.
Odkaz na místní sloupec je sloupec, který se v klauzuli FROM dotazu přeložil na odkaz na tabulku.
Jinými slovy: Odkazy na sloupce musí být buď součástí klíčů seskupení, nebo musí být součástí agregace.
Azure Databricks porovnává výrazy na základě podle možností: Například rozpozná: SELECT c1 + 5 FROM T GROUP BY 5 + c1 jako odpovídající výrazy.
Ale SELECT c1 FROM T GROUP BY c1 + 5 se neshoduje.
Zmírnění
Zmírnění chyby závisí na příčině:
Chybí vám sloupec seskupování?
Přidejte
expressionnebo relevantní dílčí výrazexpressiondo klauzuleGROUP BY.Je odkaz na sloupec součástí výrazu
GROUP BY, který se liší odepression?Porovná výraz v seznamu
SELECTnebo zjednoduší výrazGROUP BY.Chybí vám agregace?
Obklopte odkaz na sloupec agregační funkcí. Pokud chcete pouze reprezentativní hodnotu ze skupiny, můžete použít any_value(epression).
Příklady
-- 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