SQL面试题更新 2026-08-05

请编写一条 SQL 语句,实现:对于每位客户,计算其最新订单的金额,并求出该金额占该客户所有订单总金额的比例。

编码实现技术原理SQL

考察说明

考查窗口函数或关联子查询在分组取最新记录及占比计算中的应用。

回答思路

  1. 【回答框架 1】使用窗口函数 ROW_NUMBER() 按客户分组按订单时间排序取最新订单,或使用关联子查询找到每个客户最新订单时间,再关联订单表获取最新订单金额。
  2. 【回答框架 2】计算每个客户所有订单总金额时,可用 SUM(amount) 按客户分组汇总。
  3. 【回答框架 3】将最新订单金额除以总金额得到比例,注意处理除数为 0 的情况。
  4. 【回答框架 4】若平台支持,可使用 RATIO_TO_REPORT 或类似窗口函数直接计算比例。
  5. 【回答框架 5】验证结果时需考虑同一客户存在多个最新时间订单的情况,需明确排序字段唯一性。
  6. 【关键点 1】每条 SQL 必须满足:客户维度分组、取最新订单、计算占比。
  7. 【关键点 2】优先用 ROW_NUMBER() 获得最新订单,再用 CASE WHEN 提取金额。
  8. 【关键点 3】比例计算时使用 CAST 转换为浮点数,并处理总金额为 0 的边界。
  9. 【易错点 1】仅按客户分组不取最新订单,导致结果错误。
  10. 【易错点 2】未处理同时间多个订单导致重复计数。
  11. 【易错点 3】除数为零时直接报错,需使用 NULLIF 防护。