So sánh theo từng tháng
Để so sánh giữa các tháng, bạn cần dùng một trong các window function sau:
LAG(value, offset), trả về một giá trị tại số dòng offset trước dòng hiện tại trong báo cáo.LEAD(value, offset), trả về một giá trị tại số dòng offset sau dòng hiện tại trong báo cáo.
Mục tiêu của bạn là xây dựng một báo cáo hiển thị lượt xem theo từng tháng cho mỗi quốc gia. Một vài mẹo:
- Bạn sẽ cần gom nhóm ngày theo tháng. Để làm điều này, bạn có thể dùng hàm
DATE_PART(). - Bạn có thể tính tỷ lệ thay đổi bằng công thức:
(value)/(previous_value) - 1. - Nếu không truyền giá trị offset vào các hàm
LAG()hoặcLEAD(), mặc định sẽ là 1.
Vì bảng dữ liệu dừng giữa tháng 6, truy vấn được thiết lập chỉ bao gồm dữ liệu đến hết tháng 5.
Bài tập này là một phần của khóa học
Lập báo cáo trong SQL
Hướng dẫn bài tập
- Từ
web_data, truy xuấtcountry_idvà dùng hàmDATE_PART()để tạomonth. - Tạo
month_viewsđể lấy tổng lượt xem trong tháng. - Tạo
previous_month_viewsđể lấy tổng lượt xem của tháng trước cho quốc gia tương ứng. - Tạo trường
perc_changeđể tính tỷ lệ thay đổi của tháng này so với tháng trước cho quốc gia đó, trong đó giá trị âm thể hiện lượt xem giảm và giá trị dương thể hiện tăng trưởng.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
SELECT
-- Pull month and country_id
____ AS month,
____,
-- Pull in current month views
____ AS month_views,
-- Pull in last month views
____ AS previous_month_views,
-- Calculate the percent change
____ AS perc_change
FROM ____
WHERE date <= '2018-05-31'
GROUP BY ____;