提问 · 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 就无法复现。无法复现的排名不要进汇报。

WUJI问数

个人笔记站。记录用中文把业务问题变成可核对查询的方法与实践。

本站为个人非经营性网站,内容开放阅读。文中示例仅供学习,执行任何数据库操作前请自行核对。

笔记关于隐私说明使用说明浙ICP备2025147228号