提问 · 2026 年 3 月 9 日 · 11 分钟
排名和 Top N:先定排序键,再定并列规则
Top 10 看起来具体,其实藏着未说完的规则。按什么排?并列算不算第十?不足十个怎么办?公开示例里的「销量最好」若不钉排序键,每个人都会排到自己熟悉的列上。
排序键只能有一个主键
可以有次键,但主键必须写死。金额优先还是件数优先,会换一批赢家。
并列规则
两名金额相同,是都进前十,还是按编号再排。不写,结果无法复现。
窗口函数只是写法
RANK、DENSE_RANK、ROW_NUMBER 对应三种并列哲学。先选哲学,再选函数。
一次完整的问法可以先写成下面这样:
3 月已支付成交金额前十的 SKU。金额相同看件数,件数再同看 sku_id。只要十行。
落到语句上,草稿常常是:
SELECT sku_id, gmv, qty
FROM (
SELECT
sku_id,
SUM(pay_amount) AS gmv,
SUM(sku_qty) AS qty,
ROW_NUMBER() OVER (ORDER BY SUM(pay_amount) DESC, SUM(sku_qty) DESC, sku_id) AS rn
FROM order_items
WHERE pay_time >= DATE '2026-03-01'
AND pay_time < DATE '2026-04-01'
AND pay_status = 'paid'
GROUP BY sku_id
) t
WHERE rn <= 10;
ROW_NUMBER 会切断并列。若业务要「并列都算」,改用 RANK,并允许超过十行。把选择写在问题上。
提问是规格,不是文采
公开的提问建议把好问题拆成时间、指标、筛选、统计、呈现。我把它当成规格书。规格可以写得不好看,不可以缺零件。零件缺了还硬跑,就是用默认值替别人做决定。
相对时间必须有锚点。形容词必须换成规则。追问必须能单独重跑。这三条足够挡住提问阶段最常见的漂。
高频问题做成卡片。卡片有版本。口径改了就升版本,不要在聊天里口头补丁。口头补丁过一周,谁也说不清当时的数是哪一版口径问出来的。
读完这一辑可以做什么
把你最常问的三句话写成卡片。每张卡片第一行写锚点规则,第二行写指标计算,第三行写排除项。然后拿这三张卡片去对三天的报表。对不上,先改卡片,不改心理预期。
并列规则不写,Top N 就无法复现。无法复现的排名不要进汇报。