Hive 查询 - 将值除以组中值的数量

问题描述

我正在尝试创建一个查询,在该查询中我根据该组的结果数量划分其中一个值,但我找不到有关如何执行它的答案。

假设我的数据如下:

request_id 客户名称 request_price
鲍勃 10
爱丽丝 10
b 鲍勃 20
b 查理 20

我想获得一个查询,该查询将为每组 client_name & request 返回一个结果,但 request_price 是 request_price / 每个请求的客户数量。诸如此类的东西 -

select request_id,client_name,AVG(request_price) / <SIZE_OF_GROUP> from DATA group by request_id

结果应该是 -

request_id 客户名称 calculated_value
鲍勃 5
爱丽丝 5
b 鲍勃 10
b 查理 10

有人可以帮忙吗?有没有办法在单个查询中做到这一点?

解决方法

您可以计算由 request_id 划分的窗口的平均值:

select
    request_id,client_name,AVG(request_price) over (partition by request_id) / COUNT(request_price) over (partition by request_id) as calculated_value
from DATA
,

可以先计算request_id的分组值,然后将数据加入主表

请参考以下:

  hive> select * from data
    > ;
OK
a   bob 10
a   alice   10
b   bob 20
b   charlie 20
Time taken: 0.082 seconds,Fetched: 4 row(s)

select data.req_id,data.client_name,req_price/cnt as calc_val from data join (select req_id,count(req_id) as cnt from data group by req_id) tmp
on data.req_id=tmp.req_id;

Total MapReduce CPU Time Spent: 3 seconds 580 msec
OK
a   bob 5.0
a   alice   5.0
b   bob 10.0
b   charlie 10.0
Time taken: 46.804 seconds,Fetched: 4 row(s)

可能还有其他方法可以实现相同的目标,但这就是我能想到的