create materialized view dm_course_summary as select e.course_id, c.title, count(distinct e.user_id) as unique_users, count(distinct l.id) as lessons_count, count(distinct lv.id) as total_views, count(distinct lv.id)*1.0/count(distinct e.user_id) as avg_views_per_user, min(lv.viewed_at) as first_viewed_at, max(lv.viewed_at) as last_viewed_at from enrollments e join courses c on e.course_id = c.id join lessons l on c.id = l.course_id join lessons_views lv on lv.lesson_id = l.id group by e.course_id, c.title order by e.course_id