场景 · 2026 年 8 月 18 日 · 9 分钟
订单是状态机,金额只是挂在某一态上的数
订单不是一行永远的金额,是一串状态。问「卖了多少」却不说哪一态,等于在状态机上闭眼跳。下单金额、支付金额、发货金额、未取消金额,四条时间列可能都不一样。问数要把态说出来。
一态一时间
支付看 pay_time,取消看 cancelled_at。混用会把取消单算进业绩。
退款不是负的下单
退款有自己的单和自己的时间。用支付减退,要声明窗口是否同一段。
状态机图画在卡片上
允许的状态名单写死。
一次完整的问法可以先写成下面这样:
3 月支付成功且截至昨天仍未取消的金额。
落到语句上,草稿常常是:
SELECT SUM(pay_amount) AS gmv
FROM orders
WHERE pay_time >= DATE '2026-03-01'
AND pay_time < DATE '2026-04-01'
AND pay_status = 'paid'
AND (cancelled_at IS NULL OR cancelled_at >= DATE '2026-04-01');
取消发生在 4 月的 3 月支付,算不算 3 月业绩,必须在口径里回答。语句只是把答案写出来。
场景是方法的试验场
零售、订单、漏斗、对账、活动、同期群、库存、内容、地域,题目不同,四拍不变。变的是时间列、粒度、状态机和空间字段。
订单是状态机,金额挂在某一态上。漏斗每一步都要写清分母。库存是时点,销售是期间,不能加在一起。地域至少有下单、收货、仓、门店、IP 五种,选错一种地图会说谎。
灰度从每天都问的那几句开始。无聊的句子才扛得住每天跑。新场景先写成卡片,再允许进日常。没有卡片的新词,先拒绝。
读完这一辑可以做什么
只选一个场景,做成三张卡片和三道金标准。不要同时开零售和财务。场景一多,口径会互相污染。
先点名状态,再谈金额。金额只挂在某一态上。