OLHub

Advanced query patterns

Subquery vs CTE vs LATERAL, recursive CTE, window functions nâng cao (frame clause, gap-and-island), set operations, UPSERT, MERGE (PG 15+).

7 bài · ~150 phút

Nội dung

Danh sách bài học

  1. 01

    Subquery, CTE, LATERAL — 3 cách viết cùng một logic

    Subquery (scalar/correlated/IN/EXISTS), CTE (WITH), và LATERAL — mỗi pattern có ngữ cảnh phù hợp riêng. Hiểu khi nào dùng cái nào là bước nhảy từ 'biết SQL' sang 'viết SQL có chủ đích'.

    ~22 phút
  2. 02

    Recursive CTE — duyệt cây comment, breadcrumb, và hierarchy trong SQL

    WITH RECURSIVE trong PostgreSQL: anchor, recursive part, termination, cycle prevention với path array và CYCLE clause, pitfall infinite loop, và khi nào nên dùng ltree hay closure table.

    ~22 phút
  3. 03

    Window functions nâng cao — Frame clause, NTILE, PERCENT_RANK, Gap-and-island

    4 advanced pattern ít người biết: ROWS/RANGE/GROUPS frame clause, NTILE quartile, PERCENT_RANK/CUME_DIST relative rank, và gap-and-island cho streak analysis — viết analytics query phức tạp mà không cần CTE chồng nhiều cấp.

    ~22 phút
  4. 04

    Set Operations — UNION, INTERSECT, EXCEPT

    Khi nào dùng UNION ALL thay vì JOIN phức tạp? INTERSECT và EXCEPT giải bài 'giao / hiệu' của 2 tập user trong 1 dòng. Hiểu NULL semantics và ORDER BY scope để tránh pitfall ẩn.

    ~16 phút
  5. 05

    UPSERT — INSERT ... ON CONFLICT idempotent

    Webhook giao 2 lần, INSERT thứ 2 crash unique constraint. ON CONFLICT (PG 9.5+) giải quyết trong 1 câu: DO NOTHING để skip silent, DO UPDATE để merge. EXCLUDED virtual table, RETURNING để phân biệt insert/update, và pitfall race condition khi compute-from-current.

    ~20 phút
  6. 06

    MERGE Statement — ETL multi-rule sync trong một câu lệnh

    PostgreSQL 15 cuối cùng cũng có MERGE sau hơn một thập kỷ. Hiểu khi nào MERGE thắng UPSERT, cú pháp WHEN clause, demo bulk sync TaskFlow 3 case, RETURNING trong PG 17, và pitfall duplicate source gây lỗi ngầm.

    ~18 phút
  7. 07

    Mini-challenge M08 — Sprint burndown chart: precompute snapshot hằng ngày

    TaskFlow cần burndown chart realtime cho sprint. Compute on-the-fly quá chậm — precompute snapshot table cập nhật incremental. Combine 4 pattern Module 8: recursive CTE date series, window function cumulative, UPSERT incremental refresh.

    ~30 phút