MISSING_AGGREGATION hibaosztály
A nem összesítő kifejezés <expression>
olyan oszlopokon alapul, amelyek nem vesznek részt a GROUP BY záradékban.
Adja hozzá az oszlopokat vagy a kifejezést a GROUP BY függvényhez, összesíti a kifejezést, vagy használja <expressionAnyValue>
, ha nem érdekli, hogy a csoporton belüli értékek közül melyik lesz visszaadva.
Paraméterek
- kifejezés: Nem összesítés, nem csoportosítási kifejezés a
SELECT
listában. - expressionAnyValue:
expression
egy any_value() összesítő függvénybe csomagolva.
Magyarázat
A GROUP BY záradékkal rendelkező lekérdezés környezetében a SELECT listában a helyi oszlophivatkozásoknak a következőknek kell lenniük:
- Egy összesítő függvény argumentumaként használva, vagy
- Egy kifejezés része, amely megfelel a záradékban szereplő kifejezésnek
GROUP BY
.
A helyi oszlophivatkozás olyan oszlop, amely a lekérdezés FROM záradékában található táblahivatkozásra lett feloldva.
Más szóval: Az oszlophivatkozások vagy a csoportosítási kulcsok részei, vagy az összesítés részei.
Az Azure Databricks a legjobb erőfeszítéssel egyezik a kifejezésekkel: például a következőt fogja felismerni: SELECT c1 + 5 FROM T GROUP BY 5 + c1
matematikai kifejezésként.
De SELECT c1 FROM T GROUP BY c1 + 5
ez nem egyezés.
Kezelés
A hiba elhárítása az októl függ:
Kihagyott egy csoportosítási oszlopot?
Adja hozzá
expression
a , vagy a záradék megfelelő alkinyomásátGROUP BY
expression
.A kifejezés oszlophivatkozási
GROUP BY
része eltér a következőtőlepression
: ?Egyezzen a listában szereplő kifejezéssel
SELECT
, vagy egyszerűsítse le aGROUP BY
kifejezést.Hiányzik az összesítés?
Az oszlophivatkozás körbefuttatása összesítő függvénnyel. Ha csak egy reprezentatív értéket szeretne a csoportból, használhatja any_value(elnyomás).
Példák
-- 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