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