Aracılığıyla paylaş


MISSING_AGGREGATION hata koşulu

SQLSTATE: 42803

Toplama olmayan ifade <expression>, GROUP BY yan tümcesine katılmayan sütunları temel alır.

Sütunları veya ifadeyi GROUP BY'a ekleyin, ifadeyi toplayın veya bir grup içindeki değerlerden hangisinin döneceği önemli değilse <expressionAnyValue> kullanın.

Parametreler

  • ifade: SELECT listesinde toplama yapmayan ve gruplandırmayan bir ifade.
  • expressionAnyValue: any_value() toplama işlevinde sarmalanmış expression.

Açıklama

GROUP BY yan tümcesine sahip bir sorgu bağlamında, SELECT listesindeki yerel sütun başvuruları şu kurallara uymalıdır:

  • veyabir toplama işlevi için bağımsız değişken olarak kullanılır
  • GROUP BY yan tümcesindeki bir ifadeyle eşleşen bir ifadenin parçası olan bir kısım.

Yerel sütun başvurusu, sorgunun FROM yan tümcesindeki bir tablo başvurusuna çözümlenmiş bir sütundur.

Başka bir deyişle: Sütun referansları, gruplama anahtarlarının bir parçası olmalı veya toplamanın bir parçası olmalıdır.

Azure Databricks,en iyi ifadelerle eşleşir: Örneğin, matematik ifadeleri olarak tanır. Ama SELECT c1 FROM T GROUP BY c1 + 5 eşleşmez.

Azaltma

Hatanın azaltılması nedene bağlıdır:

  • Gruplandırma için bir sütunu kaçırdınız mı?

    expression yan tümcesine expression'i veya GROUP BY'in ilgili alt ifadesini ekleyin.

  • Bir GROUP BY ifadesinin parçası olan sütun referansı epression'den farklı mı?

    SELECT listesindeki ifadeyi eşleştirin veya GROUP BY ifadesini basitleştirin.

  • Toplamayı kaçırıyor musunuz?

    Sütun başvuruyu bir toplama işleviyle sarmalar. Gruptan yalnızca temsili bir değer istiyorsanız,any_value(epression) kullanabilirsiniz.

Örnekler

-- 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