语句 · 2026 年 5 月 10 日 · 9 分钟

默认 SELECT:问数的第一纪律

问数的语句默认是 SELECT。这不是风格,是纪律。公开落地把只读写成工具层约束:禁止更新、删除和结构变更。个人练习即使在自己的库上,也把默认写成 SELECT,把例外写成另一份变更单。

草稿里出现写操作就作废

看见 UPDATE、DELETE、DROP、TRUNCATE,整张收据作废,重新从问题开始。

WITH 也要只读

公共表表达式里不要夹带写。拆逻辑可以,改数据不行。

SELECT INTO 也要小心

有的方言会落盘。落盘就是写。问数不落盘。

一次完整的问法可以先写成下面这样:

只读取 3 月上海已支付订单的金额合计。

落到语句上,草稿常常是:

SELECT SUM(pay_amount) AS gmv
FROM orders
WHERE pay_time >= DATE '2026-03-01'
  AND pay_time < DATE '2026-04-01'
  AND city = '上海'
  AND pay_status = 'paid';

第一纪律看起来笨。笨的纪律才能在累的时候还有效。

语句是收据,默认只读

第一纪律是 SELECT。草稿里出现更新、删除、结构变更,整张收据作废。第二纪律是时间窗。大表没有时间条件,不跑。第三纪律是粒度。GROUP BY 的键必须和问题里的维度一一对应。

一对多关联会把头上的金额按明细复制,看起来像增长,其实是扇形。COUNT 和 COUNT DISTINCT 不是同一指标。NULL 不是 0。日期函数没有世界语,能写绝对区间就写绝对区间。

复杂逻辑用公共表表达式拆开。拆开是为了给人看中间结果。先对再快。用索引去救一条口径错误的语句,会把错误生产化。

读完这一辑可以做什么

把你最近一条问数语句拆成三段 WITH:过滤、聚合、排名。每一段单独跑。有一段解释不清,就回到提问,不要在语句里继续加花样。

默认 SELECT 看起来笨。笨的纪律才能在累的时候还有效。

WUJI问数

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

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

笔记关于隐私说明使用说明ICP备案查询