质量 · 2026 年 7 月 21 日 · 9 分钟
空结果:先查过滤,再查有没有数据
公开呈现层提到:没有数据时不要空白,要说明。个人核对也一样。零行先放松过滤:去掉城市、放宽一天、去掉状态。若放宽后立刻有数,是过滤问题。若仍无,才是真的没有。不要把零当成「表现不好」的结论。
先数未过滤的一天
确认表不是空的。
再逐个加回过滤
看哪一条把行杀光。
状态值是否写错
paid 写成 Paid,就会全空。
一次完整的问法可以先写成下面这样:
诊断:3 月上海已支付为何为零行。
落到语句上,草稿常常是:
SELECT
COUNT(*) FILTER (WHERE TRUE) AS all_march,
COUNT(*) FILTER (WHERE city = '上海') AS shanghai,
COUNT(*) FILTER (WHERE city = '上海' AND pay_status = 'paid') AS shanghai_paid
FROM orders
WHERE pay_time >= DATE '2026-03-01'
AND pay_time < DATE '2026-04-01';
三个计数把空结果变成可读的原因。原因清楚了,才允许写「没有成交」。
质量看结果,不看词序
自然语言到 SQL 的评测,后来用执行结果是否一致来打分。个人核对也应该看数。语句丑、结果对,比语句漂亮、结果错更有用。
空结果先查过滤,再查有没有数据。和对账报表不一致,先对齐五项:时间列、含税、含退、内部单、粒度。报错之后改一处,同一问题设迭代上限。路径要看得见:选表原因、关联原因、过滤原因,写在收据上。
金标准至少二十道,覆盖时间、粒度、一对多、空值、同环比。标准数从报表来,不要用某次问数的结果自我证明。给出数字时,把口径名称和单位一起写上。
读完这一辑可以做什么
选五道你每周都问的题,把报表数抄在卡片背面。以后只认这五个数。感觉上的准确率,先靠边。
零行先当过滤问题。证实没有数据之后,才允许写结论。