다음을 통해 공유


MISSING_AGGREGATION 오류 조건

SQLSTATE: 42803

비집계 표현식 <expression>는 GROUP BY 절에 참여하지 않는 열들을 기반으로 합니다.

열이나 식을 GROUP BY에 추가하고, 식을 집계하거나, 그룹 내의 값 중 반환되는 특정 값을 신경 쓰지 않는다면 <expressionAnyValue>을 사용합니다.

매개 변수

  • : SELECT 목록에서 비 집계, 비 그룹화 식입니다.
  • expressionAnyValue: any_value() 집계 함수로 감싸진 expression.

설명

GROUP BY 절이 있는 쿼리 컨텍스트 내에서 SELECT 목록의 로컬 열 참조는 다음과 여야 합니다.

  • 집계 함수의 인수로 소모되거나
  • GROUP BY 절의 식과 일치하는 표현의 일부입니다.

로컬 열 참조는 쿼리의 FROM 절에서 테이블 참조로 확인된 열입니다.

즉, 열 참조는 그룹화 키의 일부이거나 집계의 일부여야 합니다.

Azure Databricks는 최선의 노력식과 일치합니다. 예를 들어 SELECT c1 + 5 FROM T GROUP BY 5 + c1 수학 식으로 인식합니다. 그러나 SELECT c1 FROM T GROUP BY c1 + 5는 일치하지 않습니다.

완화 방법

오류 완화는 원인에 따라 달라집니다.

  • 그룹화 열을 놓쳤나요?

    expression또는 expression의 관련 하위 표현을 GROUP BY 절에 추가하십시오.

  • 열 참조가 GROUP BY와 다른 epression 식의 일부인가요?

    SELECT 목록의 식을 일치시키거나 GROUP BY 식을 단순화합니다.

  • 집계를 놓치고 있나요?

    열 참조를 집계 함수로 래핑합니다. 그룹의 대표 값만 원하는 경우 any_value(epression)사용할 수 있습니다.

예제

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