MISSING_AGGREGATION 오류 클래스
집계되지 않는 식 <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