การเปรียบเทียบแบบเดือนต่อเดือน
ในการเปรียบเทียบข้อมูลระหว่างเดือน ให้ใช้ window function ต่อไปนี้:
LAG(value, offset)ซึ่งดึงค่าจากแถวที่อยู่ก่อนหน้าแถวปัจจุบันตามจำนวน offset ที่กำหนดLEAD(value, offset)ซึ่งดึงค่าจากแถวที่อยู่ถัดจากแถวปัจจุบันตามจำนวน offset ที่กำหนด
เป้าหมายคือสร้างรายงานที่แสดงจำนวนการดูของแต่ละประเทศแบบเดือนต่อเดือน โดยมีเคล็ดลับดังนี้:
- ต้องจัดกลุ่มวันที่ตามเดือน ซึ่งทำได้โดยใช้ฟังก์ชัน
DATE_PART() - คำนวณ เปอร์เซ็นต์การเปลี่ยนแปลง ได้จากสูตร:
(value)/(previous_value) - 1 - หากไม่ระบุค่า offset ใน
LAG()หรือLEAD()ค่าเริ่มต้นจะเป็น 1
เนื่องจากตารางมีข้อมูลถึงกลางเดือนมิถุนายน คิวรีจึงถูกตั้งค่าให้แสดงเฉพาะข้อมูลจนถึงสิ้นเดือนพฤษภาคม
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การรายงานผลด้วย SQL
คำแนะนำการฝึกหัด
- จากตาราง
web_dataดึงข้อมูลcountry_idและใช้ฟังก์ชันDATE_PART()เพื่อสร้างฟิลด์month - สร้าง
month_viewsเพื่อรวมยอดวิวทั้งหมดภายในเดือนนั้น - สร้าง
previous_month_viewsเพื่อดึงยอดวิวทั้งหมดของเดือนที่แล้วสำหรับแต่ละประเทศ - สร้างฟิลด์
perc_changeเพื่อคำนวณ เปอร์เซ็นต์การเปลี่ยนแปลง ของเดือนนี้เทียบกับเดือนที่แล้วในแต่ละประเทศ โดยค่าติดลบหมายถึงยอดวิวที่ลดลง และค่าบวกหมายถึงยอดวิวที่เพิ่มขึ้น
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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 ____;