题解 | #统计每个学校的答过题的用户的平均答题数#

统计每个学校的答过题的用户的平均答题数

https://www.nowcoder.com/practice/88aa923a9a674253b861a8fa56bac8e5

SELECT
    university,
    COUNT(question_id) / COUNT(DISTINCT q.device_id)
FROM
    user_profile u
    right JOIN question_practice_detail q ON u.device_id = q.device_id
GROUP BY
    university
ORDER BY
    university

这道题关键在于你要弄清楚两张表连接之后映射出来的表结构是怎样的。这里称user_profile为u表,question_practice_detail为q表。q表的device_id肯定是能在u表中映射得到的,因为u表包含了所有学生,也就是所有device_id,而不一定所有学生都有答题,所以q表中的device_id是可能不完全的。我们先看join方式的左连接和右连接,这种方式有主表和从表之说,左连接左表就是主表,右连接右表就是主表,主表的元组肯定是要全部显示出来的,而这道题也主要是在q表上进行统计,所以我们把q表设置为主表,可以保证它的字段都能全部显示并且没有空值出现。因为我们是按学校分组,COUNT(question_id)就表示每个学校总共做了多少题,那我们要知道有哪些同学做了题,因为有些同学做了多道,所以这里要去重。而用q.device_id就保证了是q表原本的元组。这里用inner内连接或者where这种一般连接都可以,主要是我们要清楚连接之后映射出来的表是什么样的,这样我们就能选择合适的字段进行统计。

全部评论
明白了!!!要不一直搞不懂表连接之间的区别
点赞 回复 分享
发布于 2023-06-16 22:53 江苏

相关推荐

点赞 评论 收藏
分享
11-06 16:50
门头沟学院 Java
用微笑面对困难:word打字比赛二等奖的我,也要来凑合凑合
点赞 评论 收藏
分享
评论
6
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务