笔试题:
数据库: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
注:但最后发现这个题目出的本来就不够严谨,如果某一个科目的分数频率出现次数一样这个需要获取哪一个并没有明确的指出。
从看到题目到给出答复中间花了大概一个小时,中间因为自己的数据有点问题,一时间还没法启动,换另外一个数据库启动,浪费了一定的时间,不过也从侧面反映出平时确实不怎么会数据开发,所幸的是,在某某公司的开发岗位待过一个月,真的感谢那时抓紧学习相关函数的心,不然一时间不会有思路。
后记:这个有可能还不是最优的方法,不然也不会给了笔试题后没有下文了,还需要努力。