阶段一 · SQL 表达力
这一阶段不讲 SELECT 和 JOIN,假设你已经会。重点是那些「不知道就会绕远路」的表达工具。
- 窗口函数:
OVER、PARTITION BY、框架子句,以及它和GROUP BY的本质区别 - CTE 与递归 CTE:物化行为在 PG 12 之后的变化(
MATERIALIZED/NOT MATERIALIZED) LATERAL:什么时候子查询替代不了它DISTINCT ON:Postgres 独有的取 top-1 写法- 聚合的
FILTER子句、GROUPING SETS/ROLLUP/CUBE
- 用一条 SQL 算出「每个用户第 2 次下单的时间」。
DISTINCT ON和窗口函数取 top-1,两者的语义与性能差别是什么?各自适合什么场景?- 举一个
LATERAL不可被普通子查询替代的例子。 WITH x AS (...)在 PG 12 前后的执行行为有什么变化?为什么这个变化很重要?