当前位置: 首页 > article >正文

中级练习[6]:Hive SQL订单配送与用户社交行为分析

目录

1. 即时订单比例

1.1 题目需求

1.2 代码实现

2. 向用户推荐朋友收藏的商品

2.1 题目需求

2.2 代码实现

3. 查询所有用户的连续登录两天及以上的日期区间

3.1 题目需求

3.2 代码实现


1. 即时订单比例

1.1 题目需求

从配送信息表(delivery_info)中求出每个用户的首单(用户的第一个订单)中即时订单的比例,并保留两位小数,以小数形式显示。即时订单是指期望配送日期和下单日期相同的订单,而计划订单是指期望配送日期和下单日期不同的订单。

期望结果如下:

percentage
0.5
1.2 代码实现
hive>
select
    round(sum(if(order_date=custom_date,1,0))/count(*),2) percentage
from
(
    select
        delivery_id,
        user_id,
        order_date,
        custom_date,
        row_number() over (partition by user_id order by order_date) rn
    from delivery_info
)t1
where rn=1;

2. 向用户推荐朋友收藏的商品

2.1 题目需求

从好友关系表(friendship_info)和收藏表(favor_info)中查询出应向哪位用户推荐哪些商品。推荐的商品应该是用户的朋友已收藏但用户自己尚未收藏的商品。

1)部分结果展示

user_idsku_id
1012
1014
1017
1019
1018
10111
1011

2)完整结果

user_idsku_id
1012
1014
1017
......
2.2 代码实现
hive>
select
    distinct t1.user_id,
    friend_favor.sku_id
from
(
    select
        user1_id user_id,
        user2_id friend_id
    from friendship_info
    union
    select
        user2_id,
        user1_id
    from friendship_info
)t1
left join favor_info friend_favor
on t1.friend_id=friend_favor.user_id
left join favor_info user_favor
on t1.user_id=user_favor.user_id
and friend_favor.sku_id=user_favor.sku_id
where user_favor.sku_id is null;

3. 查询所有用户的连续登录两天及以上的日期区间

3.1 题目需求

从登录明细表(user_login_detail)中查询出所有用户的连续登录两天及以上的日期区间,以登录时间(login_ts)为准。

期望结果如下:

user_idstart_dateend_date
1012021-09-272021-09-30
1022021-10-012021-10-02
1062021-10-042021-10-05
1072021-10-052021-10-06
3.2 代码实现
hive>
select user_id,
       min(login_date) start_date,
       max(login_date) end_date
from (
         select user_id,
                login_date,
                date_sub(login_date, rn) flag
         from (
                  select user_id,
                         login_date,
                         row_number() over (partition by user_id order by login_date) rn
                  from (
                           select user_id,
                                  date_format(login_ts, 'yyyy-MM-dd') login_date
                           from user_login_detail
                           group by user_id, date_format(login_ts, 'yyyy-MM-dd')
                       ) t1
              ) t2
     ) t3
group by user_id, flag
having count(*) >= 2

http://www.kler.cn/a/305009.html

相关文章:

  • uniapp在app模式下组件传值
  • MoneyPrinterTurbo – 开源的AI短视频生成工具
  • 解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url
  • 半导体企业如何利用 Jira 应对复杂商业变局?
  • 【软件工程】一篇入门UML建模图(类图)
  • NVIDIA Isaac Sim 仿真平台体验测评
  • Windows 环境下安装、使用、nodeJs 连接 TiDB 数据库
  • 使用 Milvus、vLLM 和 Llama 3.1 搭建 RAG 应用
  • 外观模式详解:如何为复杂系统构建简洁的接口
  • UE4_后期处理六—夜视仪、扫描线
  • 瑞芯微RK3568鸿蒙开发板OpenHarmony系统修改cfg文件权限方法
  • 如何提升RAG检索的准确率及答案的完整性?
  • Qt与Udp
  • git update-ref
  • 网络安全 DVWA通关指南 DVWA SQL Injection (Blind SQL盲注)
  • 【iOS】单例模式
  • 使用 PyTorch 构建 MNIST 手写数字识别模型
  • 基于单片机的水情监测站设计
  • TDengine 与飞腾腾锐 D2000 完成兼容互认证,推动国产软硬件深度融合
  • 【方法】如何禁止PDF转换成其他格式文件?
  • Dfa还原某app白盒aes秘钥
  • 微信小程序读写NFC标签(实现NFC标签快速拉起小程序)实战
  • 项目:构建高可用、负载均衡的高效Web服务器
  • 「Qt Widget中文示例指南」如何实现一个系统托盘图标?(二)
  • AndroidManifest.xml文件的重要信息
  • 【YashanDB知识库】archivelog磁盘满导致数据库abnormal