题目1——查找GPA最高值
想要知道复旦大学学生gpa最高值是多少,请你取出相应数据
题解:
1、使用MAX
select MAX(gpa) FROM user_profile WHERE university = '复旦大学'
2、使用降序排序组合limit
select gpa FROM user_profile WHERE university = '复旦大学' order by gpa desc limit 1
题目2——计算男生人数以及平均GPA
想要看一下男性用户有多少人以及他们的平均gpa是多少,用以辅助设计相关活动,请你取出相应数据
题解:
按照要求进行条件分解:
限定条件为 男性用户;
有多少人,明显是计数,count函数;
平均gpa,求平均值用avg函数;
细节问题:根据输出示例,有两个问题需要注意:
表头重命名,用as语法
浮点数的平均值可能小数点位数很多,按照示例保存一位小数,用round函数
select count(gender) as male_num,round(avg(gpa),1) as avg_gpa
from user_profile
where gender="male"
题目3——分组计算练习题
想要对每个学校不同性别的用户活跃情况和发帖数量进行分析,请分别计算出每个学校每种性别的用户数、30天内平均活跃天数和平均发帖数量
题解:先进行条件分解
限定条件:无;
每个学校每种性别:按学校和性别分组:group by gender, university
用户数:count(device_id)
30天内平均活跃天数:avg(active_days_within_30)
平均发帖数量:avg(question_cnt)
select
gender,university,
count(device_id) as user_num,
avg(active_days_within_30) as avg_active_day,
avg(question_cnt) as avg_question_cnt
from user_profile
group by gender,university
题目4——分组过滤练习题
想查看每个学校用户的平均发贴和回帖情况,寻找低活跃度学校进行重点运营,请取出平均发贴数低于5的学校或平均回帖数小于20的学校。
题解:
having筛选,having常用于对分组结果进行筛选。
这里不能使用where的原因是 where的执行顺序早于group by,所以where 也不可以使用 列的别名。而having可以,执行顺序如下:
答案:
select
university,
avg(question_cnt) as avg_question_cnt,
avg(answer_cnt) as avg_answer_cnt
from user_profile
group by university
Having avg(question_cnt)<5 or avg(answer_cnt)<20
题目5——分组排序练习题
想要查看不同大学的用户平均发帖情况,并期望结果按照平均发帖情况进行升序排列,请你取出相应数据。
题解:
select university,avg(question_cnt) as avg_question_cnt
from user_profile
group by university
order by avg_question_cnt