Window Functions trong SQL (phần 1)

Bởi Kiên Smart Data
0 Nhận xét

Trong bài viết trước chúng ta đã tìm hiểu tổng quan về Window Functions trong SQL bao gồm tác dụng và cú pháp cũng như phần loại các Window Functions. Để đi vào chi tiết, trong bài viết này SmartData sẽ tiếp tục chia sẻ rõ hơn về nhóm các Aggregate Functions được sử dụng kết hợp với từ khoá OVER để trở thành một Window Function. Các ví dụ của bài viết được thực hiện trên hệ quản trị cơ sở dữ liệu MySQL

Chuẩn bị dữ liệu

Ở bài này chúng ta sẽ thực hiện thao tác trên tập dữ liệu như sau:

Hàm Sum trong Window Function trong SQL

Phần này ta đặt ra đề bài: lấy ra danh sách thông tin category, color, sale_price, tổng tiền bán hàng nhóm theo category

Sử dụng Aggregate Functions thì ta cần phân tích phải xử lý các bước sau:

Bước 1: lấy được thông tin tổng tiền bán hàng theo từng category (gọi tạm là bảng tmp)

Bước 2: lấy thêm các thông tin color, sale_price sau khi join bảng gốc với bảng tmp

SQL> SELECT s.category, s.color, s.sale_price, tmp.sum_sale_price FROM sample s join ( select category, sum(sale_price) as sum_sale_price from sample group by category ) as tmp on s.category = tmp.category ORDER BY category

Kết quả:

Sử dụng Window Functions: ta chỉ cần tính tổng sale_price cho windows function bằng câu lệnh ‘partition by category’ nằm trong OVER như sau:

SQL> SELECT category, color,sale_price, sum(sale_price) OVER (partition by category order by category) AS total_sales FROM sample

Kết quả:

Ta có thể thấy window function đã giúp ra tính tổng theo category ngay trên từng dòng mà không cần ta phải tính toán riêng lẻ.

Cả 2 cách sẽ cho cùng 1 kết quả, nhưng bạn thấy đấy sử dụng Window Functions tiện gọn hơn đúng không. Nếu bạn hiểu đc ý nghĩa và cách dùng của Window Function thì tôi cá là các bạn sẽ chọn nó thay vì viết subquery dài như cái bơm.

Hàm Avg trong Window Function

Tương tự với hàm Sum, hàm Avg khi sử dụng kết hợp với OVER sẽ giúp ta tính toán giá trị trung bình của từng nhóm dữ liệu

Ví dụ: lấy danh sách category, color, sale_price, trung bình giá bán hàng theo category

SQL> SELECT category, color,sale_price, avg(sale_price) OVER (partition by category order by category) AS avg_sales FROM sample ;

Kết quả:

Hàm Count trong Window Function

Tương tự với hàm Sum và hàm Avg, hàm Count khi sử dụng kết hợp với OVER sẽ giúp ta tính toán giá trị số lượng bản ghi của từng nhóm dữ liệu

Ví dụ: lấy danh sách category, color, số lượng theo category

SQL> SELECT category, color, count(category) OVER (PARTITION by category order by category) AS item_count FROM sample

Ta có thể thấy hàm count ở đây trả về số lượng bản ghi trong cùng một nhóm ở mỗi dòng.

Hàm Min, Max trong Window Function

Các hàm Min, Max khi sử dụng trong Window function cũng vậy, nó sẽ giúp ta trả về ngay giá trị nhỏ nhất và lớn nhất trong nhóm giá trị mà ta quy định

Dưới đây là một ví dụ: để lấy giá trị min, max trường sale_price theo nhóm category

SQL> SELECT category, color, sale_price, min(sale_price) OVER (PARTITION by category ) AS min_sale_price, max(sale_price) OVER (PARTITION by category ) AS max_sale_price FROM sample;

Kết quả:

Kết luận

Các hàm sum, avg, … sẽ dẫn mạnh mẽ khi ta sử dụng nó trong Window function, điều này sẽ giúp ta rút ngắn được rất nhiều sự phục tạp khi làm việc.

Nếu bạn là newbie có thể tham khảo bài viết này để tìm hiểu lộ trình học DA trong 3 tháng của SmartData

Nếu bạn thấy bài viết hay và hữu ích, bạn có thể tham gia các kênh sau của SmartData để nhận được nhiều hơn nữa:

Bài viết liên quan

Để lại nhận xét

Copyright @2022 – Bản quyền thuộc Học viện dữ lệu Smart Data