开发者社区> 问答> 正文

前两天去滴滴的SQL面试题,求帮助!

已解决

学生表:tb_student(name:学生姓名,id:学号,class:班级,in_time:入学时间,age:年龄,sex:性别,major:专业)

学生成绩表:tb_score(id:学号,course:课程,score:分数)

(1)筛选出2017年入学的“计算机”专业年龄最小的10位同学名单(姓名、学号、班级、年龄)

(2)统计每个班同学各科成绩平均分大于80分的人数和人数占比

展开
收起
Carice 2021-10-04 15:54:34 1726 0
1 条回答
写回答
取消 提交回答
  • 网络规划设计师、敏捷专家、CISP、ITSS服务经理、ACA全科目、ACP4项、ACE、CBP、CDSP、CZTP等。拥有 PRINCE2 Foundation/Practitioner、CCSK、ITIL、ISO27001、PMP等多项国际认证。 专利5+、期刊10+、知识产权师。核心期刊审稿人。
    采纳回答

    您好,请参考如下答案:

    select name,id,class,age
    from tb_student
    where year(in_time)=2017 
    and major = '计算机'
    ORDER BY age ASC
    limit 10;
    
    
    SELECT a.class,
    sum(case when aaa.x > 80 then 1 else 0 end)as num_80 ,
    (sum(case when aaa.x > 80 then 1 else 0 end)/count(*))as proportion
    from tb_student a 
    INNER JOIN (SELECT id,avg(score)as x from tb_score GROUP BY id)as aaa
    on a.id = aaa.id
    GROUP BY class;
    
    

    解析:写一个子查询,从score表中得到以学号分组的学生各科平均分。命名为aaa,将其与学生表内联结。再以class分组,得到以class分组的各班学生的平均分,最后通过case语句,sum聚合函数得到平均分>80分的计数,和所占各班总人数比例。

    2021-10-04 16:13:16
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云技术面试红宝书 立即下载
超全算法笔试-模拟题精解合集 立即下载
程序员面试宝典 立即下载