HIÁNYZÓ_AGGREGÁCIÓ hibafeltétel

SQLSTATE: 42803

A <expression> nem összesítő kifejezés 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-hoz, összesítse a kifejezést, vagy használja a <expressionAnyValue>-et, ha nem számít, hogy a csoporton belüli értékek közül melyik lesz visszaadva.

Paraméterek

  • kifejezés: Nem összesítő, nem csoportosítási kifejezés a SELECT listában.
  • expressionAnyValue: expression az any_value() aggregált függvénybe burkolva.

Magyarázat

Egy GROUP BY záradékkal rendelkező lekérdezés kontextusában a SELECT lista helyi oszlophivatkozásainak a következőnek kell lenniük:

A helyi oszlopreferencia olyan oszlop, amely a lekérdezés FROM záradékában szereplő táblahivatkozásra feloldásra került.

Más szóval: Az oszlop hivatkozásoknak vagy a csoportosítási kulcsok részét kell képezniük, vagy az összesítés részét kell képezniük.

Az Azure Databricks legjobb erőfeszítésselkifejezéseket egyezik: például felismeri: SELECT c1 + 5 FROM T GROUP BY 5 + c1 matematikai kifejezésként. De SELECT c1 FROM T GROUP BY c1 + 5 nem egyezik.

Mérséklés

A hiba elhárítása az októl függ:

  • Kihagyott egy csoportosítási oszlopot?

    Adjon hozzá expression, vagy adja hozzá a expression megfelelő alkifejezését a GROUP BY záradékhoz.

  • Az oszlophivatkozás egy GROUP BY kifejezés része, amely eltér attól a epression-től?

    Egyezzen a SELECT listában szereplő kifejezéssel, vagy egyszerűsítse a GROUP BY kifejezést.

  • Hiányzik az összesítés?

    Burkolja be az oszlophivatkozást egy összesítő függvénnyel. Ha csak 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