Megosztás a következőn keresztül:


MISSING_AGGREGATION hibaosztály

SQLSTATE: 42803

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á expressiona , vagy a záradék megfelelő alkinyomását GROUP BYexpression.

  • A kifejezés oszlophivatkozási GROUP BY része eltér a következőtől epression: ?

    Egyezzen a listában szereplő kifejezéssel SELECT , vagy egyszerűsítse le a GROUP 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