Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La expresión no agregada <expression> se basa en columnas que no participan en la cláusula GROUP BY.
Agregue las columnas o la expresión a GROUP BY, agregue la expresión, o use <expressionAnyValue> si no importa cuál de los valores de un grupo se devuelve.
Parámetros
-
expression: expresión de no agregación y no agrupación en la lista
SELECT. -
expressionAnyValue:
expressionencapsulado en una función de agregado any_value().
Explicación
Dentro del contexto de una consulta con una cláusula GROUP BY, las referencias de columna locales de la lista SELECT deben ser:
- Consumirse como argumento de una función de agregado, o bien
- Parte de una expresión que coincide con una expresión en la cláusula
GROUP BY.
Una referencia de columna local es una columna que se ha resuelto en una referencia de tabla en la cláusula FROM de la consulta.
En otras palabras: las referencias de columna deben formar parte de las claves de agrupación o deben formar parte de la agregación.
Azure Databricks usa la mejor coincidencia para las expresiones; por ejemplo, reconoce SELECT c1 + 5 FROM T GROUP BY 5 + c1 como expresiones matemáticas.
Pero SELECT c1 FROM T GROUP BY c1 + 5 no es una coincidencia.
Mitigación
La mitigación del error depende de la causa:
¿Ha perdido una columna de agrupación?
Agregue
expressiono la subexpresión pertinente deexpressiona la cláusulaGROUP BY.¿La referencia de columna forma parte de una expresión
GROUP BYque difiere deepression?Haz coincidir la expresión con la lista de
SELECTo simplifica la expresiónGROUP BY.¿Falta la agregación?
Encapsule la referencia de columna en una función de agregado. Si solo desea un valor representativo del grupo, puede usar any_value(epression).
Ejemplos
-- 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
Relacionado
- Funciones de agregado
- Cláusula GROUP BY
- Cláusula HAVING
- SELECT (subselección)