【阿里巴巴】查询下单次数最多的前三名用户
WHERE 条件聚合函数GROUP BYORDER BYDISTINCT用户行为分析面试真题
题目描述
来源:阿里巴巴 SQL 面试真题
某支付 App 会在客户端记录用户的支付流程日志。完整流程可能包含选择支付方式、下单、开始支付、支付失败和支付结束等步骤。现在需要找出下单订单数最多的前三名用户。
数据表
user_client_log 客户端日志表
| 字段 | 类型 | 说明 |
|---|---|---|
| trace_id | VARCHAR | 订单号 |
| uid | BIGINT | 用户 ID |
| logtime | DATETIME | 客户端事件发生时间 |
| step | VARCHAR | 客户端步骤,如 select、order、start、failed、end |
| product_id | VARCHAR | 商品 ID |
| pay_method | VARCHAR | 支付方式,可为空 |
统计口径
- 只统计
step = 'order'的下单日志。 trace_id是订单号,同一订单的 order 日志重复上报时只计 1 次。- 已产生 order 日志但后续支付失败的订单,仍属于已经下单的订单。
- 没有 order 日志的用户不输出。
题目要求
- 统计每位用户的去重下单订单数
cnt。 - 按
cnt降序排列。 - 下单数相同时,按
uid升序排列。 - 取排序后的前三名;下单用户不足三人时全部输出。
期望输出列
| 列名 | 说明 |
|---|---|
| uid | 用户 ID |
| cnt | 用户的去重下单订单数 |
数据样例
| trace_idVARCHAR(50) | uidBIGINT | logtimeDATETIME | stepVARCHAR(20) | product_idVARCHAR(32) | pay_methodVARCHAR(20) |
|---|---|---|---|---|---|
| A1001 | 101 | 2022-01-01 09:00:00 | order | P1001 | wx |
| A1001 | 101 | 2022-01-01 09:00:01 | order | P1001 | wx |
| A1002 | 101 | 2022-01-01 09:10:00 | order | P1002 | alipay |
| A1003 | 101 | 2022-01-01 09:20:00 | order | P1003 | wx |
| A2001 | 102 | 2022-01-01 09:30:00 | select | P1001 | wx |
| A2001 | 102 | 2022-01-01 09:30:05 | order | P1001 | wx |
| A2002 | 102 | 2022-01-01 09:40:00 | order | P1002 | alipay |
| A2003 | 102 | 2022-01-01 09:50:00 | order | P1003 | wx |
输入数据显示 8 / 17 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里