2014-05-22 60 views
0

民間計算平均我們在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)的平均價格。

例如對於產品1的組合(客戶1,產品1)價格是 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 

回答

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 
+0

請檢查內部查詢。我需要僅由客戶根據價格總和組選擇客戶,然後按客戶名稱產品名稱對客戶進行分組。 – user1927808

+0

我已經更新了預期的輸出,使其更清晰。 – user1927808