Nâng CaoDatabase iconDatabase

Window functions trong SQL là gì? Ví dụ về ROW_NUMBER, RANK?

Window functions tính toán trên set rows liên quan nhưng không collapse chúng như GROUP BY — mỗi row vẫn giữ nguyên và nhận thêm computed value như ROW_NUMBER, RANK, LAG, running total.

  • Window functions tính toán trên window (tập rows liên quan) nhưng KHÔNG collapse rows như GROUP BY — mỗi row giữ nguyên và nhận thêm computed value.
  • OVER clause: PARTITION BY chia thành sub-windows (như GROUP BY nhưng không collapse), ORDER BY xác định thứ tự trong window.
  • ROW_NUMBER(): số thứ tự duy nhất, không ties.
  • RANK(): ties được cùng số, bỏ số sau ties (1,1,3).
  • DENSE_RANK(): ties cùng số, không bỏ số (1,1,2).
  • LAG/LEAD: LAG(salary, 1) OVER (ORDER BY hire_date) lấy giá trị row trước — tính month-over-month growth.
  • Running totals: SUM(amount) OVER (PARTITION BY user_id ORDER BY created_at ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) — cumulative sum.
  • Frame specification: ROWS BETWEEN 2 PRECEDING AND CURRENT ROW (3-row moving average), RANGE BETWEEN INTERVAL '7 days' PRECEDING AND CURRENT ROW (rolling 7-day window).
  • FIRST_VALUE/LAST_VALUE: giá trị đầu/cuối của window.
  • Practical use case: SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at DESC) AS rn FROM ordersWHERE rn = 1 lấy order mới nhất của mỗi user — pattern deduplication phổ biến.

Xem toàn bộ Database cùng filter theo level & chủ đề con.

Mở danh sách Database