我有一个数据集看起来像这样:

---------------------------
 cust | cost | cat   | name
---------------------------
  1   |  2.5 | apple | pkLady
---------------------------
  1   |  3.5 | apple | greenGr
---------------------------
  1   |  1.2 | pear  | yelloPear
----------------------------
  1   |  4.5 | pear  |  greenPear
-------------------------------

我的配置单元查询现在应该比较客户购买的每件商品的最便宜价格。因此,我现在想将2.5和1.2合并为一行以获取其区别。由于我是Hive的新手,因此在进入下一类商品时,我仍然不会忽略其他所有东西,而我仍然保持上一类商品中最便宜的价格。

最佳答案

您可以创建一个包含每个客户的最低成本的子查询,然后将其加入原始表:

select
    mytable.*,
    minCost.minCost,
    cost - minCost as costDifference
from mytable
inner join
    (select
       cust,
       min(cost) as minCost
    from mytable
    group by cust) minCost
on mytable.cust = minCost.cust

我使用MySQL创建了interactive SQLFiddle example,但它在Hive中应该可以正常工作。

10-06 13:30