Chức năng của Window là gì?
Các chức năng của cửa sổ cho phép người dùng thực hiện các phép tính đối với các phân vùng (tức là nhóm con hoặc phần) của một tập hợp kết quả, thường là một bảng hoặc các kết quả từ một truy vấn khác. Không giống như các hàm tổng hợp truyền thống, chỉ trả về một giá trị duy nhất cho mỗi nhóm được xác định trong truy vấn, các hàm cửa sổ trả về một giá trị duy nhất cho mỗi hàng đầu vào.
Các hàm cửa sổ hữu ích như thế nào?
Các hàm cửa sổ làm tăng hiệu quả và giảm độ phức tạp của các truy vấn phân tích các phân vùng (cửa sổ) của tập dữ liệu bằng cách cung cấp một giải pháp thay thế cho các khái niệm SQL phức tạp hơn, ví dụ:truy vấn dẫn xuất. Các trường hợp sử dụng phổ biến bao gồm:
- Xếp hạng kết quả trong một cửa sổ cụ thể (ví dụ:xếp hạng theo nhóm)
- Truy cập dữ liệu từ một hàng khác trong một cửa sổ cụ thể (ví dụ:báo cáo theo định kỳ)
- Tổng hợp trong một cửa sổ cụ thể (ví dụ:tổng số đang chạy):
Cách sử dụng các Hàm Window
Các chức năng của cửa sổ được khởi tạo bằng OVER
và được định cấu hình bằng ba khái niệm:
- phân vùng cửa sổ (
PARTITION BY
) - nhóm các hàng thành các phân vùng - sắp xếp theo cửa sổ (
ORDER BY
) - xác định thứ tự hoặc trình tự của các hàng trong mỗi cửa sổ - khung cửa sổ (
ROWS
) - xác định cửa sổ bằng cách sử dụng độ lệch từ hàng được chỉ định
Tổng quan về cú pháp
function (expression) OVER
( [ PARTITION BY expression_list ]
[ ORDER BY order_list ]
[ ROWS frame_clause ])
Định nghĩa
- express_list:danh sách các biểu thức được phân tách bằng dấu phẩy, thường là tên cột
- order_list:danh sách các biểu thức được phân tách bằng dấu phẩy, thường là tên cột
- frame_clause:xác định độ lệch bằng
CURRENT ROW
,_value_ PRECEDING
,UNBOUNDED PRECEDING
,_value_ FOLLOWING
,UNBOUNDED FOLLOWING
Ví dụ
Xếp hạng:xếp hạng theo nhóm
SELECT
campaign
, month
, total_cost
, rank() OVER (PARTITION BY month ORDER BY month DESC, total_cost DESC) as "rank"
FROM Cost_by_Month
LIMIT 8
Hàng trước:phân tích theo khoảng thời gian
SELECT
campaign
, month
, total_cost
, LAG(total_cost, 1) OVER (ORDER BY campaign, month) as "previous total cost"
FROM Cost_by_Month
WHERE campaign = 'TV'
LIMIT 4
Tổng hợp trong một cửa sổ:tổng số đang chạy
SELECT
campaign, month, monthly_cost
, sum(monthly_cost) OVER (PARTITION BY campaign ORDER BY month ROWS BETWEEN UNBOUNDED
PRECEDING and CURRENT ROW) as "running cost total"
FROM Cost_by_Month
Danh sách Tài liệu &Chức năng:
Xin lưu ý rằng sự khác biệt nhỏ trong cách sử dụng và cú pháp tồn tại từ cơ sở dữ liệu đến cơ sở dữ liệu. Để biết thông tin cụ thể cho việc triển khai của bạn, vui lòng sử dụng tài liệu dành riêng cho nguồn được cung cấp bên dưới.
Postgres
- Hướng dẫn
- Chức năng
Dịch chuyển đỏ
- Hướng dẫn
- Chức năng
Oracle
- Hướng dẫn
SQLServer
- Hướng dẫn
BigQuery
- Hướng dẫn