Chuyển đến nội dung chính
Mô-đun 13 · Bài học 1 trong tổng số 449/57 trong khóa học~15 min
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ẻ.

SQL
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!

tập thể dục#sql.m13.l1.e1
Nỗ lực: 0Đang tải…

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.

Đang tải trình chỉnh sửa…
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ử

tập thể dục#sql.m13.l1.e2
Nỗ lực: 0Đang tải…

Trích xuất 'id', 'price' và thêm giá trung bình tổng thể ('global_avg') từ bảng 'products'.

Đang tải trình chỉnh sửa…
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ử