SQL 刷题/【阿里巴巴】查询下单次数最多的前三名用户
上一题下一题简单通过率 100%

【阿里巴巴】查询下单次数最多的前三名用户

WHERE 条件聚合函数GROUP BYORDER BYDISTINCT用户行为分析面试真题

题目描述

来源:阿里巴巴 SQL 面试真题

某支付 App 会在客户端记录用户的支付流程日志。完整流程可能包含选择支付方式、下单、开始支付、支付失败和支付结束等步骤。现在需要找出下单订单数最多的前三名用户。

数据表

user_client_log 客户端日志表

字段类型说明
trace_idVARCHAR订单号
uidBIGINT用户 ID
logtimeDATETIME客户端事件发生时间
stepVARCHAR客户端步骤,如 select、order、start、failed、end
product_idVARCHAR商品 ID
pay_methodVARCHAR支付方式,可为空

统计口径

  • 只统计 step = 'order' 的下单日志。
  • trace_id 是订单号,同一订单的 order 日志重复上报时只计 1 次。
  • 已产生 order 日志但后续支付失败的订单,仍属于已经下单的订单。
  • 没有 order 日志的用户不输出。

题目要求

  • 统计每位用户的去重下单订单数 cnt
  • cnt 降序排列。
  • 下单数相同时,按 uid 升序排列。
  • 取排序后的前三名;下单用户不足三人时全部输出。

期望输出列

列名说明
uid用户 ID
cnt用户的去重下单订单数

数据样例

当前运行环境
trace_idVARCHAR(50)uidBIGINTlogtimeDATETIMEstepVARCHAR(20)product_idVARCHAR(32)pay_methodVARCHAR(20)
A10011012022-01-01 09:00:00orderP1001wx
A10011012022-01-01 09:00:01orderP1001wx
A10021012022-01-01 09:10:00orderP1002alipay
A10031012022-01-01 09:20:00orderP1003wx
A20011022022-01-01 09:30:00selectP1001wx
A20011022022-01-01 09:30:05orderP1001wx
A20021022022-01-01 09:40:00orderP1002alipay
A20031022022-01-01 09:50:00orderP1003wx
输入数据显示 8 / 17
SQL 编辑器正在保存草稿...
正在加载 SQL 编辑器...

运行你的 SQL 查询后,结果将显示在这里