# 1、查询完成了 “数据科学进阶” (course_id= 'DS-102') 课程的所有学员2025-03
with t1 as (
select distinct user_id from course_completions
where completion_date between '2025-03-01' and '2025-03-31'
and course_id = 'DS-102'
),
# 2、计算平均星级
t2 as (
select
cr.user_id,
round(avg(rating), 2) as average_rating
from content_reviews cr
inner join t1
on t1.user_id = cr.user_id
where cr.course_id = 'DS-102'
group by 1
)
# 3、合并所有信息
select
t2.user_id,
average_rating,
case when average_rating >= 4.0 then '优质反馈学员'
else '普通反馈学员'
end as feedback_type,
t3.latest_review_date
from t2
left join(
# 获取最新评价日期
select user_id,
date_format(max(review_date), '%Y-%m-%d') as latest_review_date
from content_reviews
group by user_id # 有max窗口函数,所以需要group
) t3
on t2.user_id = t3.user_id
order by
case when feedback_type = '优质反馈学员' then 2
when feedback_type = '普通反馈学员' then 1 end asc,
average_rating desc,
t2.user_id asc
;