ค่าเฉลี่ยรายเดือนเมื่อมีวันที่ขาดหาย
หาจำนวนคำร้อง Evanston 311 ที่สร้างขึ้นต่อวันโดยเฉลี่ยในแต่ละเดือนของข้อมูล
คราวนี้ อย่าละเว้นวันที่ไม่มีคำร้อง
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Exploratory Data Analysis ใน SQL
คำแนะนำการฝึกหัด
- สร้างชุดวันที่ตั้งแต่ 2016-01-01 ถึง 2018-06-30
- Join ชุดวันที่ดังกล่าวกับ subquery เพื่อนับจำนวนคำร้องที่สร้างขึ้นในแต่ละวัน
- ใช้
date_trunc()เพื่อดึงข้อมูลเดือนจากdateซึ่งมีวันที่ครบทุกวัน ไม่ใช่จากday - ใช้
coalesce()เพื่อแทนที่ค่า NULL ในcountด้วย 0 แล้วคำนวณค่าเฉลี่ยของค่านี้
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
-- generate series with all days from 2016-01-01 to 2018-06-30
WITH all_days AS
(SELECT generate_series(___,
___,
___::___) AS date),
-- Subquery to compute daily counts
daily_count AS
(SELECT date_trunc('day', date_created) AS day,
count(*) AS count
FROM evanston311
GROUP BY day)
-- Aggregate daily counts by month using date_trunc
SELECT ___ AS month,
-- Use coalesce to replace NULL count values with 0
avg(coalesce(___, ___)) AS average
FROM all_days
LEFT JOIN daily_count
-- Joining condition
ON all_days.___=daily_count.___
GROUP BY month
ORDER BY month;