分组基操(一)

  万丈高楼平地起,不要小看了任意一根稻草!

  现有一个学生简介表,记录了每一个学生的年龄,性别,学校,以及30天内活跃天数,发帖数量,回答数量等信息,数据如下:

 

   其中,gender 性别包括 male 男,female 女,active_days_within_30 是30天内活跃天数,question_cnt 是发帖数量,answer_cnt 是回答数量

 

  需求一

  现在论坛需要对每个学校每种性别的学生人数以及活跃情况做分析,具体来说,就是统计每个学校的每种性别一共有多少人,这些人30天内平均活跃天数,平均发帖数量和平均回答数量

  这是一个基本的多字段分组,分组之后的聚合统计。avg 与 sum 不能嵌套,所以需要用除法计算,再使用 round 函数四舍五入保留一位小数。

SELECT
	university,
	gender,
	count(id) user_num,
	ROUND(sum(active_days_within_30) / count(id), 1) avg_active_day,
	ROUND(sum(question_cnt) / count(id), 1) avg_question_cnt
FROM
	user_profile
GROUP BY
	university,
	gender

  结果如下所示:

  

 

   其中,user_num 统计了分组后的人数,sum 后的总发帖和总活跃天数除以人数即是平均值,再使用 round 取舍即可

  再来点基操中的基操,count 1 = count * 不去空,count col 去空。

 

  需求二

  现在论坛想要知道每个学校的平均发帖量和回帖量,并找出平均发帖量小于 5 和平均回帖量小于 20 的学校,然后重点运营。另外,平均值四舍五入保留3位小数。

  显然,分组学校后需要对统计的结果进行筛选,having 就派上用场了

select 
university,
round(sum(question_cnt)/count(1),3) avg_question_cnt,
round(sum(answer_cnt)/count(1),3) avg_answer_cnt
from user_profile group by university
having 
avg_question_cnt < 5
or avg_answer_cnt < 20

  结果如下所示:

 

   

 

posted @ 2022-05-16 11:12  远走不高飞  阅读(57)  评论(0)    收藏  举报