Hive通过计算不同的分组和计算平均值

时间:2014-05-22 10:30:30

标签: hadoop hive

我们在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)的平均价格。

e.g。对于product1的组合(customer1,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

1 个答案:

答案 0 :(得分:0)

如果我理解正确,这里似乎唯一的麻烦就是你有重复。如果您删除重复的事件,那么它是一个简单的组和平均值:

select customer_name, product_name, avg(price)
from (
  select distinct customer_name, product_name, price, occurance_id from cprd
) t
group by customer_name, product_name