2016-09-20 25 views
0

執行鍼對組聚合功能之前列類型我有一個表,MY_TABLE:帕拉:改變由

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

當我由團隊基,我可以計算最大,最小通過查詢:

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

但是,我不能做平均和因爲有空。即:

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的值爲零。處理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 

更新:根據您的評論,我再次對Impala不熟悉。據推測,標準的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查看更新,瞭解潛在解決方案。 –