임 :

2016-09-20 4 views
0

의해 그룹의 통합 기능을 수행하기 전에 열 유형을 변경 I가 MY_TABLE 테이블 :임 :

:

transaction_id | money  | team 
-------------------------------------------- 
    1    | 10  | A 
    2    | 20  | B 
    3    | null  | A 
    4    | 30  | A 
    5    | 16  | B 
    6    | 12  | B 

I는 팀 그룹 I 쿼리를 통해 최대, 최소값을 계산할 수

select team, max(money), min(money) from my_table group by team 

그러나 null이 있으므로 평균 및 합을 계산할 수 없습니다. 즉

select team, avg(money), sum(money) from my_table group by team 

이 실패합니다.

평균 및 합계를 계산하기 전에 열 유형을 변경하는 방법이 있습니까? 즉 출력을 다음과 같이 설정합니다.

team | avg(money) | sum(money) 
-------------------------------------- 
A  | 20   | 40 
B  | 16   | 48 

고마워요!

+0

내가 임팔라에 익숙하지 않아요하지만 당신이 원하는 한대로 SQL이 이미 작동합니다. Impala에는 COALESCE 또는 NULLIF 함수가 있습니까? SUM에 0을 사용할 수 있습니다. AVG를 다루는 것이 더 까다 롭습니다. –

+1

문서에서는'sum'과'avg'에 대해 '지정된 열의 NULL 값을 가진 행이 무시됩니다.'라고 말합니다. –

+0

질문하기 전에 쿼리를 테스트 했습니까? – sstan

답변

1

Cloudera가 제공 한 설명서에 따라 쿼리가있는 그대로 작동해야합니다. AVG FunctionSUM Function 모두 null을 무시합니다.

SELECT team, AVG(money), SUM(money) 
FROM my_table 
GROUP BY team 

업데이트 : 귀하의 의견에 따라 다시 임팔라에 익숙하지 않습니다. 아마도 표준 SQL이 작동 할 것입니다. 오류가 데이터 유형 문제 인 것 같습니다.

SELECT team, AVG(CAST(money AS INT)), SUM(CAST(money AS INT)) 
FROM my_table 
GROUP BY team 
+0

이것은 내가 가진 오류입니다 : HiveServer2Error : AnalysisException : AVG는 숫자 또는 타임 스탬프 매개 변수를 필요로합니다 : avg (money) 아니면 테이블에 정의되어 있지 않으면 숫자로 숫자를 처리합니까? 감사! – Edamame

+0

@Edamame 잠재적 해결책을 찾기 위해 업데이트를 참조하십시오. –