Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det icke-aggregerande uttrycket <expression> baseras på kolumner som inte deltar i GROUP BY-satsen.
Lägg till kolumnerna eller uttrycket i GROUP BY, aggregera uttrycket eller använd <expressionAnyValue> om du inte bryr dig om vilka av värdena i en grupp som returneras.
Parametrar
- 
              uttryck: Ett icke-aggregerande och icke-grupperande uttryck i listan 
SELECT. - 
              expressionAnyValue: 
expressionomsluten av en any_value() aggregatfunktion. 
Förklaring
I kontexten för en fråga med en GROUP BY-sats måste de lokala kolumnreferenserna i listan SELECT vara:
- Används som argument för en mängdfunktion, eller
 - En del av ett uttryck som matchar ett uttryck i 
GROUP BY-satsen. 
En lokal kolumnreferens är en kolumn som har lösts till en tabellreferens i frågans FROM-klausul.
Med andra ord: Kolumnreferenser måste antingen ingå i grupperingsnycklarna eller vara en del av aggregeringen.
Azure Databricks matchar uttryck enligt så gott det går: Till exempel matchas: SELECT c1 + 5 FROM T GROUP BY 5 + c1 som matchande uttryck.
Men SELECT c1 FROM T GROUP BY c1 + 5 är inte någon match.
Förmildrande omständighet
Avhjälpandet av felet beror på orsaken:
Missade du en grupperingskolumn?
Lägg till
expression, eller relevant underuttryck avexpressioniGROUP BY-satsen.Är kolumnreferensen en del av ett
GROUP BY-uttryck som skiljer sig frånepression?Matcha uttrycket i
SELECT-listan eller förenklaGROUP BY-uttrycket.Saknar du sammanställningen?
Omslut kolumnreferensen med en mängdfunktion. Om du bara vill ha ett representativt värde från gruppen kan du använda any_value(epression).
Exempel
-- 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