Bài học theo mô-đun (1/4)
Giới thiệu và mệnh đề OVER
Giới thiệu và mệnh đề OVER
Trong các bài học trước, chúng ta đã biết cách sử dụng GROUP BY để tổng hợp dữ liệu. Tuy nhiên, GROUP BY có một hạn chế rất lớn: nó thu gọn các hàng. Nếu bạn nhóm theo thành phố, bạn sẽ nhận được một hàng cho mỗi thành phố và mất thông tin chi tiết về từng khách hàng.
Đây là lúc Chức năng cửa sổ phát huy tác dụng. Chúng cho phép bạn chạy các phép tính tổng hợp (chẳng hạn như tổng hoặc trung bình) trong khi vẫn giữ các hàng ban đầu.
Mệnh đề OVER()
Từ khóa kỳ diệu là OVER(). Nó cho cơ sở dữ liệu biết rằng hàm tổng hợp (ví dụ: SUM, AVG, COUNT) phải được coi là hàm cửa sổ, được tính toán trên toàn bộ tập kết quả ("cửa sổ" chung nhưng được áp dụng và trả về trên mỗi hàng đơn lẻ.
SELECT
order_id,
total_amount,
AVG(total_amount) OVER() AS global_average
FROM orders;Trong ví dụ này, chúng tôi giữ lại từng đơn hàng riêng lẻ nhưng mỗi hàng cũng có cột global_average với trung bình của tất cả đơn hàng. Ví dụ: rất hữu ích để đo lường mức độ sai lệch của một đơn hàng so với mức trung bình!
Chọn cột 'giá' từ bảng 'sản phẩm'. Thêm một cột có tên 'global_max_price' chứa mức giá tối đa được tính bằng hàm cửa sổ trên toàn bộ bảng.
Hiển thị gợi ý
Sử dụng MAX(giá) kết hợp với OVER().
Giải pháp khả dụng sau 3 lần thử
Trích xuất 'id', 'price' và thêm giá trung bình tổng thể ('global_avg') từ bảng 'products'.
Hiển thị gợi ý
Chỉ cần thêm AVG(price) OVER().
Giải pháp khả dụng sau 3 lần thử