找到不偏科的学生(提取学生的所有课程都大于各个课程平均分的学生)

3 篇文章 0 订阅

今天快手面试,凉凉。首先一道SQL题,刚看起来挺简单的,可是一直不知道如何解决某个学生的所有课程都大于各自的平均分。面试完想了一下,首先计算各个课程的平均分,连接到原本的数据表上,这很容易想到,可是让各个学生的所选课程都大于他该如何弄,可以将各个分数-各自的平均分,按学生分组,删选出差值大于0的学生ID

create table student_test_info(
id bigint primary key auto_increment,
student_id bigint,
student_name varchar(10),
course_id bigint,
course_name varchar(10),
score bigint
);
insert into student_test_info values
(1,201001,'张代斯',101,'商务统计',73),
(2,201001,'张代斯',104,'时间序列分析',67),
(3,201001,'张代斯',105,'随机过程',52),
(4,201002,'李美妮',104,'时间序列分析',61),
(5,201002,'李美妮',102,'应用回归分析',63),
(6,201003,'孙娜德',101,'商务统计',87),
(7,201003,'孙娜德',107,'计量经济学',82);
select a.*, b.avgScore, a.score - b.avgScore as diff
from student_test_info a
join
(select course_id, avg(score) avgScore
from 
student_test_info group by course_id) b on a.course_id = b.course_id;

±—±-----------±-------------±----------±-------------±------±---------+
| id | student_id | student_name | course_id | course_name | score | avgScore |
±—±-----------±-------------±----------±-------------±------±---------+
| 1 | 201001 | 张代斯 | 101 | 商务统计 | 73 | 80.0000 |
| 2 | 201001 | 张代斯 | 104 | 时间序列分析 | 67 | 64.0000 |
| 3 | 201001 | 张代斯 | 105 | 随机过程 | 52 | 52.0000 |
| 4 | 201002 | 李美妮 | 104 | 时间序列分析 | 61 | 64.0000 |
| 5 | 201002 | 李美妮 | 102 | 应用回归分析 | 63 | 63.0000 |
| 6 | 201003 | 孙娜德 | 101 | 商务统计 | 87 | 80.0000 |
| 7 | 201003 | 孙娜德 | 107 | 计量经济学 | 82 | 82.0000 |
±—±-----------±-------------±----------±-------------±------±---------+
±—±-----------±-------------±----------±-------------±------±---------±--------+
| id | student_id | student_name | course_id | course_name | score | avgScore | diff |
±—±-----------±-------------±----------±-------------±------±---------±--------+
| 1 | 201001 | 张代斯 | 101 | 商务统计 | 73 | 80.0000 | -7.0000 |
| 2 | 201001 | 张代斯 | 104 | 时间序列分析 | 67 | 64.0000 | 3.0000 |
| 3 | 201001 | 张代斯 | 105 | 随机过程 | 52 | 52.0000 | 0.0000 |
| 4 | 201002 | 李美妮 | 104 | 时间序列分析 | 61 | 64.0000 | -3.0000 |
| 5 | 201002 | 李美妮 | 102 | 应用回归分析 | 63 | 63.0000 | 0.0000 |
| 6 | 201003 | 孙娜德 | 101 | 商务统计 | 87 | 80.0000 | 7.0000 |
| 7 | 201003 | 孙娜德 | 107 | 计量经济学 | 82 | 82.0000 | 0.0000 |
±—±-----------±-------------±----------±-------------±------±---------±--------+

select c.student_id from 
(select a.*, b.avgScore, a.score - b.avgScore as diff
from student_test_info a
join
(select course_id, avg(score) avgScore
from 
student_test_info group by course_id) b on a.course_id = b.course_id) c
group by c.student_id having min(c.diff) >= 0;

后面就一直在探讨快手或者抖音某个类型的视频活跃度下降,你该如何做?当时回答的挺糟糕的,只说了先验证是否真实,然后自己做一些初步的描述性统计,比如环比之类的,然后找到线管的部门看是不是最近有新的业务调整或者APP的登陆界面或者是供给侧(播主)视频量减少的原因等。回答的很散,面试官告诉我这主要考场的是你整个的一个逻辑框架,虽然有部分达到点上了,但是我的逻辑很混乱。
确实是这样,当时回答的吞吞吐吐的,有点不自信,哎以后坚决不能嬉皮笑脸了。因为作为数据分析者(尤其是商业分析,与业务相关的),你不仅仅是做分析,更重要的是推动其他部门,与相关人员进行对接,要是你自己都不能相信自己,你如何去说服别人去听从你的建议呢?

这类问题我想主要分为一下步骤去回答:
第一判断真实性,因为确实是有数据不准确的原因存在
然后分三点进行探讨:大环境(大盘)、供给侧(播主)、平台
对于大环境:你要看一下这个下降是否在一个合理的范围,是不是出现了季节性周期性变换,比如学生开学等;是否出现了大盘大环境都整体下降。这个角度我想主要是判断你这个数据下降的是否是合理的。
对于供给侧:播主这一段时间的投放视频数有没有变化,播主的总人数是不是有所下降,有没有出现流失的情况
对于平台:你是否正确的进行了推荐,有没有将视频推荐给目标受众等等,或者平台这一段时间有没有进行整改(这就要去问技术部门、运营部门等,技术部门:接口是否稳定,是不是界面流畅,是不是这两天在升级进不去等;运营部门有没有做一些活动等)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值