我在Hive中有一个表,其中包含商店名称,订单ID和用户ID(以及包括商品ID在内的其他一些列)。表中有一行用于购买的每件商品(因此,如果订单包含多个商品,则每个订单可以有多行)。订单ID在商店中是唯一的,但不是在商店之间。单个订单可以有多个与之关联的用户ID。
我正在尝试编写一个查询,该查询将返回所有商店和订单ID的列表以及与每个订单相关联的最短用户ID。
因此,例如,如果数据如下所示:
STORE | ORDERID | USERID | ITEMID
------+---------+--------+-------
| a | 1 | bill | abc |
| a | 1 | susan | def |
| a | 2 | jane | abc |
| b | 1 | scott | ghi |
| b | 1 | tony | jkl |
然后输出看起来像这样:
STORE | ORDERID | USERID
------+---------+-------
a | 1 | bill
a | 2 | jane
b | 1 | tony
我已经编写了一个可以执行此操作的查询,但我觉得必须有更有效的方法来实现它。有没有人知道产生这些结果的更好方法?
这是我到目前为止所做的:
select
users.store, users.orderid, users.userid
from
(select
store, orderid, userid, length(userid) as len
from
sales) users
join
(select distinct
store, orderid,
min(length(userid)) over (partition by store, orderid) as len
from
sales) len on users.store = len.store
and users.orderid = len.orderid
and users.len = len.len
答案 0 :(得分:0)
可能 "scripts": {
"dev": "NODE_ENV=myValue myProgram"
}
是最好的方法:
MYVAR=myOtherValue
答案 1 :(得分:0)
查看这可能对您有用,在这里您可以实现单个“SELECT”子句的目标,而不会产生额外的SQL开销。
select distinct
store, orderid,
first_value(userid) over(partition by store, orderid order by length(userid) asc) f_val
from
sales;
结果将是:
store orderid f_val
a 1 bill
a 2 jane
b 1 tony