主要信息

  • 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;