2016-12-13 58 views
0

我必須編寫Hive SQL。使用Hive中的join sql查找每個類別的最低價格

我想找到每個類別的最低價格。我想爲每個類別獲得一行,包括類別ID,產品ID,價格(最低價格)和圖片url列。 在下面的例子中,我們最終需要兩行。

幫幫我。謝謝。

「category_product_match」 表

category_id product_id 
1001    500001 
1001    500002 
1002    500101 
1002    500102 
1002    500103 

「產品的詳細信息」 表

prd_id  price  img_url 
500001  29000  /app/url/img/500001.jpg 
500002  29500  /app/url/img/500002.jpg 
500101  8100  /app/url/img/500101.jpg 
500102  8100  /app/url/img/500102.jpg 
500103  8500  /app/url/img/500103.jpg 

回答

0

您可以使用窗口函數:

select pc.* 
from (select pi.*, cpm.category_id, 
      row_number() over (partition by cpm.category_id order by pi.price asc) as seqnum 
     from product_info pi join 
      category_product_match cpm 
      on cpm.product_id = pi.prd_id 
    ) pc 
where seqnum = 1; 
+0

謝謝。戈登Linoff。 查詢中pc表的列是什麼? – minsu

+0

@minsu。 。 。來自'pi','category_id'和'seqnum'的所有​​列。說實話,我只是使用'select *'作爲短手,因爲特定的列似乎不是問題的重要部分。 –

+0

我沒有理解它。謝謝 – minsu

0

使用MIN聚合函數內部聯接和組通過與分類號

Select category_id ,product_id, Min(price) as lowest_Price,img_url 
from category_product_match 
inner join product_info on product_id=prd_id 
group by category_id; 

此處演示Sqlfiddle

+0

MySQL允許您選擇不在GROUP BY中的列。但Hive不會(和大多數其他RDBMS),所以這將產生一個錯誤(無法選擇product_id,因爲你沒有按它分組......) – MatBailie

+0

我知道你需要把所有的列在「選擇「group by」子句中的「子句」。 – minsu