问题描述
我正在尝试创建一个查询,在该查询中我根据该组的结果数量划分其中一个值,但我找不到有关如何执行它的答案。
假设我的数据如下:
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
划分的窗口的平均值:
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)
可能还有其他方法可以实现相同的目标,但这就是我能想到的