【面/笔试题】数据开发-每个课程出现频率最多的分数

笔试题:
数据库:oracle11g:
有个学生课程分数表 t,
列 student,course,grade ,
请找出每个课程出现频率最多的分数,显示如下列: course,grade。

分析:
每科、频率、最多分数,即需要获取每个科目的分数重复次数最多的数据,这里需要注意使用分析函数,不然获取每个分组会有点麻烦。

解决:
1、创建表和插入数据
create table t(student int,course int,grade int);
insert into t values(1,1,90);
insert into t values(1,2,80);
insert into t values(1,3,90);
insert into t values(2,1,96);
insert into t values(2,2,98);
insert into t values(2,3,96);
insert into t values(3,1,90);
insert into t values(3,2,80);
insert into t values(3,3,90);
insert into t values(4,1,90);
insert into t values(4,2,90);
insert into t values(4,3,90);
commit;

2、语句
--首先查询出每科的分数出现次数n,然后使用分析函数对n进行排名,最后获取每个科目排名第一的数据
with test as
 (select course
         ,grade
         ,count(student) st
    from t
   group by course, grade
   order by course, st desc)
select course
       ,grade
  from (select course
               ,grade
               ,st
               ,row_number() over(partition by course order by st desc) r
          from test) t
 where t.r = 1;

COURSE    GRADE
1                 90
2                 80
3                 90

 

:但最后发现这个题目出的本来就不够严谨,如果某一个科目的分数频率出现次数一样这个需要获取哪一个并没有明确的指出。

从看到题目到给出答复中间花了大概一个小时,中间因为自己的数据有点问题,一时间还没法启动,换另外一个数据库启动,浪费了一定的时间,不过也从侧面反映出平时确实不怎么会数据开发,所幸的是,在某某公司的开发岗位待过一个月,真的感谢那时抓紧学习相关函数的心,不然一时间不会有思路。

后记:这个有可能还不是最优的方法,不然也不会给了笔试题后没有下文了,还需要努力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值