[英]Hive query - divide value by the amount of values in the group
我正在嘗試創建一個查詢,在該查詢中,我將其中一個值划分為該組的結果數量,但我找不到有關如何執行它的答案。
假設我的數據如下:
request_id | 客戶名稱 | 請求價格 |
---|---|---|
一個 | 鮑勃 | 10 |
一個 | 愛麗絲 | 10 |
b | 鮑勃 | 20 |
b | 查理 | 20 |
我想獲得一個查詢,該查詢將為每組 client_name 和請求返回一個結果,但 request_price 是 request_price / 每個請求的客戶端數量。 類似的東西 -
select request_id, client_name, AVG(request_price) / <SIZE_OF_GROUP> from DATA group by request_id
結果應該是 -
request_id | 客戶名稱 | 計算值 |
---|---|---|
一個 | 鮑勃 | 5 |
一個 | 愛麗絲 | 5 |
b | 鮑勃 | 10 |
b | 查理 | 10 |
有人可以幫忙嗎? 有沒有辦法在一個查詢中做到這一點?
您可以計算按request_id
分區的 window 的平均值:
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)
可能有其他方法可以實現相同的目標,但這是我能想到的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.