【MYSQL快速入门】牛客网:多表查询

 

 

例1:查看所有来自浙江大学的用户题目回答明细情况包括device_id,question_id,result。请你取出相应数据

思路 :

连接表user和practice_detail连接键(user_profile.device_id,question_practice_detail.device.id)

显示:user_profile.universty,practice_detail.result

select qpd.device_id,qpd.question_id,qpd.result
from user_profile as u
join question_practice_detail as qpd
using(device_id)
where u.university="浙江大学"

(不用分组,直接用where选择)

例2:统计每个大学的平均答题数量,显示university,avg_answer_cnt,结果按照university升序排序

思路:按照大学分组,平均答题数量为答题总数量/答题人数

select u.university,count(qpd.result)/count(distinct qpd.device_id)
from user_profile as u
join question_practice_detail as qpd
using(device_id)
group by u.university;

例3:取出不同学校,不同难度的用户平均答题量

思路:先以学校分组,后以难度分组,使用表2连接表1 和表3

select university,difficult_level,count(result)/count(distinct device_id) as avg_answer_cnt
from question_practice_detail as qpd
left join user_profile as u using(device_id)
left join question_detail as qd using(question_id)
group by university,difficult_level

如果多个表中除了连接键外,没有重复的列名,那么可以省去别名,直接写列名。

join和left join都对?

例4:查看参加了答题的山东大学的用户在不同难度下的平均答题题数

select u.university,qd.difficult_level,count(q.result)/count(distinct q.device_id)
from question_practice_detail as q
left join user_profile as u using(device_id)
left join question_detail as qd using(question_id)
group by u.university,qd.difficult_level
having u.university="山东大学"

或者用where university="山东大学",放在group by前面,表示先把山东大学的记录筛选出来再进行分组

例5:分别查看学校为山东大学或者性别为男性的用户的device_id、gender、age和gpa数据,请取出相应结果,结果不去重。

结果不去重:union all

select device_id,gender,age,gpa 
from user_profile
where university="山东大学"
union all
select device_id,gender,age,gpa 
from user_profile
where gender="male"

猜你喜欢

转载自blog.csdn.net/m0_52043808/article/details/124133280