メインコンテンツまでスキップ

MISSING_AGGREGATIONエラークラス

SQLSTATE: 42803

非集計式 <expression> は、グループ BY 句に参加していない列に基づいています。

カラムまたは式をグループ BY に追加するか、式を集計するか、グループ内のどの値が返されるかを気にしない場合は <expressionAnyValue> を使用します。

パラメーター

  • expression : SELECT リスト内の非集計、非グループ化の式。
  • expressionAnyValue : any_value() 集計関数にラップされた expression

説明

グループ BY 句を含むクエリのコンテキスト内では、SELECT リスト内のローカル列参照は次のようにする必要があります。

  • 集計関数の引数として消費される、または
  • GROUP BY句の式と一致する式の一部。

ローカル列参照は、クエリのFROM 句で テーブル参照 に解決された列です。

言い換えると、列参照はグループ化キーの一部であるか、集約の一部である必要があります。

Databricks は 、ベスト エフォート で式を照合します。 たとえば、 SELECT c1 + 5 FROM T GROUP BY 5 + c1 を数式として認識します。しかし、 SELECT c1 FROM T GROUP BY c1 + 5 は一致しません。

緩和

エラーの軽減策は、原因によって異なります。

  • グループ化列を見落としていませんか?

    expression、または関連する expression の部分式を GROUP BY 句に追加します。

  • 列参照は、epressionとは異なるGROUP BY式の一部ですか?

    SELECTリスト内の式を一致させるか、GROUP BY式を簡略化します。

  • 集計が欠落していませんか?

    列参照を集計関数でラップします。 グループからの代表的な値のみが必要な場合は、 any_value(epression)を使用できます。

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

関連