Nội dung
Danh sách bài học
- 01~22 phút
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'.
- 02~22 phút
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.
- 03~22 phút
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.
- 04~16 phút
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.
- 05~20 phút
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.
- 06~18 phút
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.
- 07~30 phút
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.