ITPub博客

首页 > 数据库 > 数据库开发技术 > HiveSQL-面试题034 不及格课程数大于2的学生的平均成绩及其排名

HiveSQL-面试题034 不及格课程数大于2的学生的平均成绩及其排名

原创 数据库开发技术 作者:晨曦_001 时间:2023-10-18 08:06:00 0 删除 编辑

一、题目

有学生每科科目成绩,求不及格课程数大于2的学生的平均成绩及其成绩平均值后所在的排名。

+------+------+--------+| sid  | cid  | score  |+------+------+--------+| 1    | 1    | 90     || 1    | 2    | 50     || 1    | 3    | 72     || 2    | 1    | 40     || 2    | 2    | 50     || 2    | 3    | 22     || 3    | 1    | 30     || 3    | 2    | 50     || 3    | 3    | 52     || 4    | 1    | 90     || 4    | 2    | 90     || 4    | 3    | 72     |+------+------+--------+

二、分析

1.本题比较简单,考查的是聚合函数、条件函数和排序开窗函数,重点在考察基础知识点

2.先计算出每个学生的平均成绩、不及格的科目数;

3.根据平均成绩计算排名;

4.得出最后结果;

维度 评分
题目难度 ⭐️⭐️⭐️
题目清晰度 ⭐️⭐️⭐️⭐️⭐️
业务常见度 ⭐️⭐️⭐️⭐️

三、SQL

1)使用聚合函数计算出每个学生的平均成绩、不及格科目数

selectsid,avg(score) as avg_score,sum(case when score <60 then 1 else 0 end) as fail_numfrom t_scores_034group by sid

查询结果

2)根据平均成绩计算排名

select sid,avg_score,fail_num,dense_rank()over(order by avg_score desc) as rnfrom(--计算学生的平均成绩,不及格科目数selectsid,avg(score) as avg_score,sum(case when score <60 then 1 else 0 end) as fail_numfrom t_scores_034group by sid) t

查询结果

3.剔除不增长的记录,计算每次连续次数。(连续问题,这里使用双排序法,就不赘叙了)

selectsid,avg_score,rnfrom (select sid,avg_score,fail_num,dense_rank()over(order by avg_score desc) as rnfrom(--计算学生的平均成绩,不及格科目数selectsid,avg(score) as avg_score,sum(case when score <60 then 1 else 0 end) as fail_numfrom t_scores_034group by sid) t)ttwhere fail_num >2

查询结果

四、建表语句和数据插入

--建表语句CREATE TABLE t_scores_034 (sid bigint COMMENT '学生ID',cid bigint COMMENT '课程ID',score bigint COMMENT '得分') COMMENT '用户课程分数'ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;-- 插入数据insert into t_scores_034(sid,cid,score)values(1,1,90),(1,2,50),(1,3,72),(2,1,40),(2,2,50),(2,3,22),(3,1,30),(3,2,50),(3,3,52),(4,1,90),(4,2,90),(4,3,72)


原文作者:数据仓库技术;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
公众号:数据仓库技术 数据仓库技术:https://dwsql.com spark内置函数手册: https://sparkfunctions.com

注册时间:2022-12-18

  • 博文量
    116
  • 访问量
    55273