Menu
CoddyTech

Tiêu chí PARTITION BY

Thuộc phần Kiến thức cơ bản trong hành trình SQL của Coddy. Bài học 59 trên 72.

Một lựa chọn khác cho mệnh đề OVER () là PARTITION BY

Nó cho phép chúng ta đánh số các hàng riêng cho từng nhóm 

Ví dụ:

idtype
132t1
52t2
92t1
154t3
198t1
SELECT id, type, ROW_NUMBER() OVER (PARTITION BY type ORDER BY id) as row_num
FROM table1

Thao tác này sẽ tạo một cột đánh số riêng các hàng của từng loại, theo thứ tự id (kết quả bên dưới được nhóm theo loại):

idtyperow_num
92t11
132t12
198t13
52t21
154t31

id 92 có row_num là 1 vì đây là id nhỏ nhất trong type t1.

Ghi chú: ORDER BY bên trong OVER() là tùy chọn. Nếu không có phần này, các hàng trong mỗi phân vùng vẫn được đánh số, nhưng thứ tự không được đảm bảo.

Ta thậm chí có thể chỉ định nhiều cột bên trong PARTITION BY:

ROW_NUMBER() OVER (PARTITION BY type, hue ORDER BY id)
challenge icon

Thử thách

Dễ

Các bảng và cột hiện có:

  • doors: id, publication_year
  • doors_specs: id, country, color

Một nhà máy đang sản xuất cửa. Nhà máy cần đánh số các cửa trong từng tổ hợp country và color có publication_year nhỏ hơn 2000. Đặt tên cột này là row_num.

Đánh số các cửa trong mỗi nhóm theo thứ tự tăng dần của id. Bỏ qua những cửa không có thông tin thông số kỹ thuật. Sắp xếp kết quả cuối cùng theo thứ tự tăng dần của id. 

Tự làm thử

quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức cơ bản

Tự luyện tập: Playground SQL