Hàm tổng hợp
Thuộc phần Kiến thức cơ bản trong hành trình SQL của Coddy. Bài học 68 trên 72.
Với OVER (ORDER BY ...), các hàm tổng hợp như AVG() hoặc MAX() được tính trên các hàng từ đầu đến hàng hiện tại, bao gồm cả những hàng có cùng giá trị ORDER BY. Nếu không có ORDER BY bên trong OVER, các hàm này được tính trên tất cả các hàng, nên mọi hàng đều có cùng một giá trị.
Ví dụ, ta có thể tính doanh thu tối đa đạt được tính đến mỗi kỳ kết thúc:
| month | revenue | region |
| 4 | 40 | East |
| 5 | 20 | East |
| 6 | 60 | West |
| 7 | 55 | West |
| 8 | 61 | East |
SELECT month, revenue, MAX(revenue) OVER (ORDER BY month ASC) as max_revenue
from table1Kết quả trả về sẽ là:
| tháng | doanh thu | max_revenue |
| 4 | 40 | 40 |
| 5 | 20 | 40 |
| 6 | 60 | 60 |
| 7 | 55 | 60 |
| 8 | 61 | 61 |
Trong tháng 4 và tháng 5, doanh thu tối đa là 40; trong tháng 6 và tháng 7, doanh thu tối đa là 60; còn trong tháng 8, doanh thu tối đa là 61. Đó là vì khi tìm thấy doanh thu mới lớn hơn, nó bỏ doanh thu cũ và dùng doanh thu lớn nhất tính đến lúc đó.
Đối với hàm AVG(), sẽ có dạng như sau:
SELECT month, revenue, AVG(revenue) OVER (ORDER BY month ASC) as avg_revenue
from table1| tháng | doanh thu | avg_revenue |
| 4 | 40 | 40 |
| 5 | 20 | 30 |
| 6 | 60 | 40 |
| 7 | 55 | 43.75 |
| 8 | 61 | 47.2 |
Chúng ta cũng có thể nhóm các phép tính theo từng danh mục cụ thể bằng PARTITION BY. Ví dụ:
SELECT month, revenue, region,
MAX(revenue) OVER (PARTITION BY region ORDER BY month ASC) as max_revenue
FROM table1Sẽ cho chúng ta:
| month | revenue | region | max_revenue |
| 4 | 40 | East | 40 |
| 5 | 20 | East | 40 |
| 6 | 60 | West | 60 |
| 7 | 55 | West | 60 |
| 8 | 61 | East | 61 |
Giờ đây, giá trị lớn nhất được tính riêng cho từng khu vực. Khu vực East và West duy trì giá trị lớn nhất hiện tại của riêng mình, độc lập với nhau.
Thử thách
DễCác bảng và cột hiện có:
books:book,page,words
Với mỗi cuốn sách, hãy hiển thị tên sách, tổng số trang, số từ trên mỗi trang và tính:
- Số từ tối đa trên bất kỳ trang nào của cuốn sách đó
- Số từ trung bình trên mỗi trang của cả cuốn sách
- Chênh lệch giữa số từ trên trang hiện tại và số từ trung bình trên mỗi trang của cuốn sách
Hiển thị kết quả theo thứ tự sách và số trang.
Trả về các cột sau:
bookpagewordsmax_words_in_bookavg_words_per_pagediff_from_avg
Tự làm thử
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
2Điều kiện
Kiến thức cơ bản về điều kiệnTừ khóa ANDTừ khóa ORTừ khóa NOTKết hợp nhiều điều kiệnDấu ngoặc đơnGiá trị logic3Định dạng giá trị trả về cụ thể
Giá trị nullSắp xếp kết quả phần 1Sắp xếp kết quả phần 2Ôn tập: Công ty an ninh mạngGiới hạn số bản ghiÔn tập: Nhà máy sản xuất xe6Thử thách nhập môn
Ôn tập: bầu cử quốc hộiÔn tập: cảnh sát bắt giữ tội phạmÔn tập: vật chứa đồ uống tại quầy barÔn tập: kỹ sư tạo cột mới9Nhiều bảng
Phép nối cơ bản phần 1Phép nối cơ bản phần 2Ôn tập về phép nốiPhép tự nốiÔn tập về phép tự nốiHợpĐơn giản hóa truy vấn bằng từ khóa WITHÔn tập về truy vấn WITHÔn tập về nhà thầu bất động sản12Hàm cửa sổ phần 2
Hàm RANK và DENSE_RANKÔn tập: RANK và DENSE_RANKHàm NTILEHàm tổng hợpTiêu chí ROWS và RANGETự luyện tập: Playground SQL