다음을 통해 공유


MISSING_AGGREGATION 오류 클래스

SQLSTATE: 42803

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

GROUP BY에 열 또는 식을 추가하거나, 식을 집계하거나, 그룹 내에서 반환되는 값 중 어느 값이 반환되는지 신경 쓰지 않는 경우 를 사용합니다 <expressionAnyValue> .

매개 변수

  • expression: 목록의 집계가 아니고 그룹화가 아닌 식입니다 SELECT .
  • expressionAnyValue: expression any_value() 집계 함수에 래핑됩니다.

설명

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