【京东】查询下单次数最多的商品
WHERE 条件JOIN 连接聚合函数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 | 支付方式,可为空 |
product_info 商品信息表
| 字段 | 类型 | 说明 |
|---|---|---|
| product_id | VARCHAR | 商品 ID,主键 |
| price | DECIMAL | 商品价格 |
| type | VARCHAR | 商品类型 |
| product_name | VARCHAR | 商品名称 |
统计口径
- 只统计
step = 'order'的下单日志。 - 不要求订单具有完整支付链路;已经下单但随后支付失败的订单仍计入下单数。
trace_id是订单号,同一订单产生重复的 order 日志时只计 1 次。- 只统计能在
product_info中找到的有效商品。
题目要求
- 按去重下单订单数降序排列。
- 若多个商品下单数相同,按
product_id升序排列。 - 只返回排序后的第一个商品 ID。
- 没有下单日志时不返回记录。
期望输出列
| 列名 | 说明 |
|---|---|
| product_id | 下单订单数最多的商品 ID |
数据样例
| trace_idVARCHAR(50) | uidBIGINT | logtimeDATETIME | stepVARCHAR(20) | product_idVARCHAR(32) | pay_methodVARCHAR(20) |
|---|---|---|---|---|---|
| T1001 | 101 | 2022-01-01 09:00:00 | select | P1001 | wx |
| T1001 | 101 | 2022-01-01 09:00:05 | order | P1001 | wx |
| T1001 | 101 | 2022-01-01 09:00:06 | order | P1001 | wx |
| T1001 | 101 | 2022-01-01 09:00:10 | start | P1001 | wx |
| T1001 | 101 | 2022-01-01 09:01:00 | end | P1001 | wx |
| T1002 | 102 | 2022-01-01 09:10:00 | order | P1001 | alipay |
| T1002 | 102 | 2022-01-01 09:10:30 | failed | P1001 | alipay |
| T1003 | 103 | 2022-01-01 09:20:00 | order | P1002 | wx |
输入数据显示 8 / 15 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里