SQL 刷题/【阿里巴巴】查询销售额排名前两名商品
上一题下一题中等通过率 50%

【阿里巴巴】查询销售额排名前两名商品

WHERE 条件JOIN 连接聚合函数GROUP BY窗口函数ORDER BYDISTINCT营收统计排行榜面试真题

题目描述

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

某支付 App 会在客户端记录支付流程日志,其中支付方式不为空的日志属于支付数据。现在需要根据支付日志和商品价格,找出销售额排名前两名的商品。

数据表

user_client_log 客户端日志表

字段类型说明
trace_idVARCHAR订单号
uidBIGINT用户 ID
logtimeDATETIME客户端事件发生时间
stepVARCHAR客户端步骤
product_idVARCHAR商品 ID
pay_methodVARCHAR支付方式,为 NULL 或空字符串时不属于支付数据

product_info 商品信息表

字段类型说明
product_idVARCHAR商品 ID,主键
priceDECIMAL商品价格
typeVARCHAR商品品类
product_nameVARCHAR商品名称

销售额口径

  • pay_method 非 NULL 且去除首尾空格后不为空的日志,视为支付数据。
  • trace_id 是订单号,同一订单可能产生多条客户端日志,同一 trace_id + product_id 只计 1 个支付订单。
  • 商品销售额 = 去重支付订单数 × 商品价格。
  • 没有支付订单的商品不参与销售额排名。

题目要求

  • 按商品销售额降序计算排名。
  • 销售额相同的商品排名相同。
  • 返回销售额排名前两个名次的全部商品名称。
  • 最终按销售额降序排列;销售额相同时按商品名称升序排列。

期望输出列

列名说明
product_name销售额排名前两名的商品名称

数据样例

当前运行环境
trace_idVARCHAR(50)uidBIGINTlogtimeDATETIMEstepVARCHAR(20)product_idVARCHAR(32)pay_methodVARCHAR(20)
R10011012022-01-01 09:00:00orderp100wx
R10011012022-01-01 09:00:10startp100wx
R10011012022-01-01 09:01:00endp100wx
R10021022022-01-01 09:10:00endp100alipay
R10031032022-01-01 09:20:00endp100wx
R20011042022-01-01 09:30:00endp101wx
R20021052022-01-01 09:40:00endp101alipay
R30011062022-01-01 09:50:00endp102wx
输入数据显示 8 / 14
SQL 编辑器正在保存草稿...
正在加载 SQL 编辑器...

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