</>
⌕
Mid #window-function#row-number#rank#lag

Window function: ROW_NUMBER, RANK, LAG dùng thế nào?

⚡ Trả lời nhanh

Window function tính toán trên một cửa sổ dòng (OVER, PARTITION BY, ORDER BY) mà không gộp dòng như GROUP BY. ROW_NUMBER đánh số duy nhất, RANK chừa khoảng trống khi đồng hạng, DENSE_RANK không chừa, LAG/LEAD lấy dòng trước/sau.

-- Top 1 đơn lớn nhất mỗi user
SELECT * FROM (
  SELECT o.*,
         ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY total DESC) AS rn
  FROM orders o
) t
WHERE rn = 1;

-- Chênh lệch so với đơn trước đó
SELECT id, total,
       total - LAG(total) OVER (PARTITION BY user_id ORDER BY created_at) AS diff
FROM orders;
Điểm 90, 90, 80ROW_NUMBERRANKDENSE_RANK
Kết quả1,2,31,1,31,1,2
🃏 Ôn bằng flashcard