【发布时间】:2023-03-03 11:16:02
【问题描述】:
伙计们,我们在 HIVE 中有一个有线要求,但我们无法编写相同的查询
基本上我们有以下数据。
CUSTOMER_NAME PRODUCT_NAME PRICE OCCURANCE ID
customer1, product1, 20, 1
customer1, product2, 30, 2
customer1, product1, 25, 3
customer1, product1, 20, 1
customer1, product2, 20, 2
基本上我们要做的就是列出单次出现的 (customer_name,product_name) 的平均价格。
例如对于组合 (customer1,product1) product1 的价格是 25+20/2(客户(1 和 3)的不同出现次数)= 22.5。但是由于我们想按 PRODUCT_NAME 分组,我们也不知道如何计算不同的出现。我用 [] 括号标记了查询,我们认为我们需要做一些更改。
另一方面是这里的内部查询,我们希望选择他们的平均价格将下降到前 5 名的客户。 (这可以正常工作,因为 group by 子句只有一个属性 CUSTOMER_NAME)
select customer_name,product_name,[sum(price)/count(distinct(occurance_id))]
from customer_prd cprd
Join (select customer_name,sum(price)/count(distinct(occurance id))
order by sum group
by customer_name limit 5)
cprdd
where cprd.customer_name = cprdd.customer_name group by cprd.customer_name,cprd.product_name
预期输出。
customer1,product1, 20 (avg for occurance ID 1) + 25(average for occurance ID 2)/2 = 22.5
customer1,product2, 30 + 20/2 = 25
【问题讨论】: