【问题标题】:Finding the lowest price for each category using join sql in Hive在 Hive 中使用 join sql 查找每个类别的最低价格
【发布时间】:2016-12-13 02:19:22
【问题描述】:

我必须编写 Hive SQL。

我想找到每个类别的最低价格。我想为每个类别获取一行,其中包含类别 ID、产品 ID、价格(最低价格)和图像 url 列。 在下面的示例中,我们最终需要两行。

帮帮我。谢谢。

“category_product_match”表

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

“product_info”表

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

【问题讨论】:

    标签: sql database join hive


    【解决方案1】:

    你可以使用窗口函数:

    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;
    

    【讨论】:

    • 谢谢。戈登·林诺夫。您的查询中 pc 表的列是什么?
    • @minsu 。 . .来自pi、category_id 和seqnum 的所有列。不过,老实说,我只是使用select * 作为速记,因为具体的列似乎不是问题的重要部分。
    • 嗨。戈登林诺夫!您之前创建的查询很好用。但我想加入一个新表。现有表“product_info”中多了三个“big category id”和“small category id”。此类别不同于以前的目录。我在新链接上写了详细的规范。帮我。 stackoverflow.com/questions/41159689/…
    【解决方案2】:

    将 Min 聚合函数与内部联接和 group by 与类别 id 一起使用

     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

    【讨论】:

    • MySQL 允许您选择不在 GROUP BY 中的列。但是 Hive 不会(以及大多数其他 RDBMS),因此这会产生错误(无法选择 product_id,因为您没有按它分组...)
    • 我知道您需要将“select”子句中的所有列放在“group by”子句中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2016-10-09
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    相关资源
    最近更新 更多