impala:在执行groupby的聚合函数之前更改列类型

ldioqlga  于 2021-06-26  发布在  Impala
关注(0)|答案(2)|浏览(518)

我有一张table,我的table:

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

当我按团队分组时,我可以通过查询计算max,min:

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

然而,我不能做平均值和总和,因为有空。即:

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

就会失败。
在计算平均值和总和之前,有没有办法更改列类型?i、 e.我希望输出为:

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

谢谢!

vq8itlhq

vq8itlhq1#

把总数除以计数:

SELECT team, SUM(money)/COUNT(money) AS AVG, SUM(money)
FROM team
GROUP BY team

此处测试:http://sqlfiddle.com/#!9/ba381/4号

qij5mzcb

qij5mzcb2#

根据cloudera提供的文档,您的查询应该按原样工作。avg函数和sum函数都忽略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

相关问题