即时订单比例
题目需求
订单配送中,如果期望配送日期和下单日期相同,称为即时订单,如果期望配送日期和下单日期不同,称为计划订单。
请从配送信息表(delivery_info)中求出每个用户的首单(用户的第一个订单)中即时订单的比例,保留两位小数,以小数形式显示。期望结果如下:
percentage |
0.5 |
知识点:
指定精度取整函数: round
语法: round(double a, int d)
返回值: DOUBLE
说明: 返回指定精度d的double类型
hive> select round(3.1415926,4) from iteblog; 3.1416 |
select round(sum(if(order_date==custom_date,1,0))/count(*),2) percentage from (select order_id,user_id,order_date,custom_date,row_number() over (partition by user_id order by order_id) rk from delivery_info1)t1 where rk=1
向用户推荐朋友收藏的商品
题目需求
现需要请向所有用户推荐其朋友收藏但是用户自己未收藏的商品,请从好友关系表(friendship_info)和收藏表(favor_info)中查询出应向哪位用户推荐哪些商品。期望结果如下:
1)部分结果展示
user_id(用户id) |
sku_id(应向该用户推荐的商品id) |
101 |
2 |
101 |
4 |
101 |
7 |
101 |
9 |
101 |
8 |
101 |
11 |
101 |
1 |
知识点:
collect_list 收集并形成list集合,结果不去重 语法:collect_list(col) 返回值:array 说明:将某分组内该字段的所有值收集成为一个数组,结果不去重 hive> select sex, collect_list(job) from employee group by sex 结果: 女 ["行政","研发","行政","前台"] 男 ["销售","研发","销售","前台"] 2)collect_set 收集并形成set集合,结果去重 语法:collect_set(col) 返回值:array 说明:将某分组内该字段的所有值收集成为一个数组,结果去重 hive> select sex, collect_set(job) from employee group by sex 结果: 女 ["行政","研发","前台"] 男 ["销售","研发","前台"]
--1.先是每个人朋友都有谁 2.朋友都收藏了那些商品 select user_id,sku_id from (select distinct user1_id, sku_id from ( select user1_id, user2_id from friendship_info UNION select user2_id, user1_id from friendship_info ) t1 left join favor_info on t1.user2_id = favor_info.user_id)t2 #自己收藏的商品(集合相减),分装成数组 left join ( select user_id,collect_list(sku_id) skus from favor_info group by user_id )t3 on t2.user1_id=t3.user_id where !array_contains(skus,sku_id);