【京东】统计 anta 商品支付渠道分布
WHERE 条件JOIN 连接聚合函数GROUP BYCASE WHEN字符串函数ORDER BY用户行为分析面试真题
题目描述
来源:京东 SQL 面试真题
某支付 App 会在客户端记录支付流程日志。现在需要统计商品名称为 anta 的日志在各个支付渠道上的分布,并将缺失支付渠道的脏数据也计入结果。
数据表
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 | 商品名称 |
统计口径
- 只统计
product_name = 'anta'的客户端日志。 - 每条符合条件的日志计为 1 次渠道记录,不限制客户端步骤。
pay_method为 NULL、空字符串或只包含空格时,统一归入unknown渠道。- 使用日志总条数统计渠道次数,脏数据也必须计入。
题目要求
- 输出支付渠道和对应的日志次数。
- 按渠道次数降序排列。
- 渠道次数相同时,按渠道名称升序排列。
期望输出列
| 列名 | 说明 |
|---|---|
| pay_method | 支付渠道,脏数据统一显示为 unknown |
| cnt | 该渠道对应的日志次数 |
数据样例
| trace_idVARCHAR(50) | uidBIGINT | logtimeDATETIME | stepVARCHAR(20) | product_idVARCHAR(32) | pay_methodVARCHAR(20) |
|---|---|---|---|---|---|
| C1001 | 101 | 2022-01-01 09:00:00 | select | p100 | wx |
| C1002 | 102 | 2022-01-01 09:10:00 | order | p100 | wx |
| C1003 | 103 | 2022-01-01 09:20:00 | start | p100 | wx |
| C1004 | 104 | 2022-01-01 09:30:00 | end | p100 | wx |
| C1005 | 105 | 2022-01-01 09:40:00 | order | p100 | alipay |
| C1006 | 106 | 2022-01-01 09:50:00 | failed | p100 | alipay |
| C1007 | 107 | 2022-01-01 10:00:00 | order | p100 | NULL |
| C1008 | 108 | 2022-01-01 10:10:00 | order | p100 |
输入数据显示 8 / 10 行
SQL 编辑器正在保存草稿...
Ctrl + Enter 运行
正在加载 SQL 编辑器...
运行你的 SQL 查询后,结果将显示在这里