Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A expressão não agregadora <expression> baseia-se em colunas que não participam na cláusula GROUP BY.
Adiciona as colunas ou a expressão ao GROUP BY, agrega a expressão, ou usa <expressionAnyValue> se não te importares com qual dos valores dentro de um grupo é devolvido.
Parâmetros
-
expressão: Expressão não agregante e não agrupante na lista de
SELECT. -
expressionAnyValue:
expressionencapsulado numa função de agregação any_value().
Explicação
No contexto de uma consulta com uma cláusula GROUP BY, as referências locais às colunas na lista de SELECT devem ser:
- Consumido como argumento numa função agregada , ou
- Parte de uma expressão que corresponde a uma expressão na cláusula
GROUP BY.
Uma referência de coluna local é uma coluna que foi resolvida para uma referência de tabela na cláusula FROM da consulta.
Em outras palavras, as referências de coluna devem ser parte das chaves de agrupamento ou devem integrar a agregação.
O Azure Databricks tenta corresponder as expressões em da melhor forma possível: Por exemplo, reconhecerá SELECT c1 + 5 FROM T GROUP BY 5 + c1 como expressões correspondentes.
Mas SELECT c1 FROM T GROUP BY c1 + 5 não é páreo.
Atenuação
A atenuação do erro depende da causa:
Perdeu uma coluna de agrupamento?
Adicione
expression, ou a subexpressão relevante deexpressionà cláusulaGROUP BY.A referência da coluna é parte de uma expressão
GROUP BYque é diferente daepression?Corresponda à expressão na lista
SELECTou simplifique a expressãoGROUP BY.Está faltando a agregação?
Envolva a referência da coluna com uma função de agregação. Se você quiser apenas um valor representativo do grupo, poderá usar any_value(epression).
Exemplos
-- 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