主要信息
- author_tb如下(其中author_id表示创作者编号、author_level表示创作者级别,共1-6六个级别、sex表示创作者性别);answer_tb如下(其中answer_date表示创作日期、author_id指创作者编号、issue_id指问题编号、char_len表示回答字数):
- 回答字数大于等于100字的认为是高质量回答,请你统计某乎问答高质量的回答中用户属于1-2级、3-4级、5-6级的数量分别是多少,按数量降序排列
问题拆解
总体思路
- 题解要求返回回答问题用户的等级,拿到用户等级和回答题目用户的对应关系
- 针对用户等级分层标记为用户级别1-2级、3-4级、5-6级
- 针对用户分层分组统计高质量回答的数量逆序排序
注:日人均不是直接求平均
具体实现
- 根据answer_tb和author_tb通过author_id连接
- 针对各个用户等级分层,使用case when,最后记为用户层级,抽取其中用户的高质量回答(char_len >= 100)
- 针对用户层级分组统计高质量回答数并逆序排列,group by x order by y DESC
考察点:join、case when(用if替代也可以但是不优雅且难写)、group by 、order by
SELECT level_cut, count(*) AS num
FROM (
SELECT author_id
, CASE
WHEN author_level BETWEEN 1 AND 2 THEN '1-2级'
WHEN author_level BETWEEN 3 AND 4 THEN '3-4级'
WHEN author_level BETWEEN 5 AND 6 THEN '5-6级'
END AS level_cut
FROM answer_tb
LEFT JOIN author_tb USING (author_id)
WHERE char_len >= 100
) t
GROUP BY level_cut
ORDER BY num DESC;