当前位置: 首页 > news >正文

平价网站建设教育培训机构管理系统

平价网站建设,教育培训机构管理系统,长春网站,aspnet新闻网站开发大家经常自嘲后端开发就是crud boy嘛,今天给大家看一道SQL题,我相信很多人写不出来。我们来看一下这个题目。 create table course (id int primary key,name varchar(32) not null ); create table student (id int primary key,name varchar(32) not …

大家经常自嘲后端开发就是crud boy嘛,今天给大家看一道SQL题,我相信很多人写不出来。我们来看一下这个题目。

create table course (id int primary key,name varchar(32) not null
);
create table student (id int primary key,name varchar(32) not null
);
create table score (id int primary key,course_id int not null,student_id int not null,score int not null
);

这三张表也是我经常在面试里面有问到的,这三张表的含义是非常好理解的,但是基于这三张表可以研发出来很多复杂的业务场景SQL面试题。我们先初始化一些课程信息和学生分数信息。

insert into course values(1,`语文`),(2,`数学`),(3,`外语`);
insert into student values(1,`小张`),(2,`小王`),(3,`小马`);
insert into score values(1,1,1,80),(2,2,1,90),(3,3,1,70);
insert into score values(4,1,2,70),(5,2,2,90),(6,3,2,80);
insert into score values(7,1,3,80),(8,2,3,60),(9,3,3,70);

总分最高的学生

求总分最高的学生他的分数是多少?这个题目其实是有一些歧义的,是总分最高呢,还是单科最高呢?作为面试的你对于题意本身理解不清晰的情况下,你应该反问面试官,而不是直接就开始写。
我们把这两种情况都来写一下,先求总分最高的学生,找到这个score表,那既然是总分,我们肯定要用sum函数,那既然用到sum,那是不是要做一个分组,基于什么分组呢?目标是要求总分最高的学生,自然想到应该基于student_id去分组,通过score表按照student_id分组我们就能拿到总分及相应的student_id,但怎么查到学生的名字呢?
很多同学很自然而然就想到去join这个student的表,但是这里隐藏一个问题,就是总分最高的可能不止一个学生,我们是通过总分进行的分组,分组后只能取到其中某一个student_id。那应该怎么去做呢?其实还要再去查一遍这个score表,把相应取得这个总分的学生的所有id都查出来,然后再去跟student的做一个连接,这样才能查出完整的数据。这个思路清晰了之后,我们的SQL语句步骤如下:

  1. 查出最高分
select sum(score) from score group by student_id order by sum(score) desc limit 1
  1. 查出最高分所有的学生ID。
select distinct(student_id) from score 
group by student_id having sum(score)=(select sum(score) from score 
group by student_id order by sum(score) desc limit 1) 
  1. join学生信息表得到获得最高分的学生信息
select s.name,t.score from student s 
right join (select distinct(student_id), sum(score) from score 
group by student_id having sum(score)  = (select sum(score) from score 
group by student_id order by sum(score) desc limit 1)) t on s.id = t.student_id

单科最高的学生

大家想一下,单科最高的话应该是要通过课程去分组,同样的获取每个单科分数最高的学生可能也不止一个,所以分组后你还要去跟score再去做一次连接,基于course id跟max score再去连一下score表从而得到每一科最高分的学生的id。
所以这个问题也是分三步,第一步就是通过course id去分组查到单科的最高分,第二步就是通过这个score表再去跟这个最高分和对应的课程id去进行right join。这里为什么是right join 大家可以思考一下,这样就查到了取得这个课程最高分的所有学生,这一步写出来了,其实最后就很简单了,去连接两个学生表跟课程表就能拿到学生的名字跟课程的名字,得到最终的SQL语句:

select s.name,c.name,s2.max_score from score s1 
right join (select max(score) max_score,course_id from score 
group by course_id) on s1.course_id = s2.course_id and s1.score=s2.max_score
left join course c on c.id = s1.course_id left join student s on s.id = student_id

虽然大部分互联网公司这种自动化的SQL生成器,也并不建议在系统里面去做连接查询,但是也有很多情况,比如说产品、运营要拉一些数据,排查一些线上问题,确实要去写一些比较复杂的CQL,而且你能写出这个SQL,代表你有两个能力,第一个就是你对业务本身理解是比较到位的,第二个就是你Sql本身的功底也是比较扎实的。
互联网行业不景气,但切莫心浮气躁,打牢基本功,才能厚积薄发!

关注公众号【小白技术圈】,回复f04即可获得2023最新全套面试资料

http://www.wooajung.com/news/30776.html

相关文章:

  • 行业网站渠道选择和内容运营成都网站维护
  • 网站建设技术服务的方式是什么注册推广
  • 装潢设计公司排行长春seo排名
  • wordpress编辑主页软件排名优化
  • 网站文章突然不收录网络推广策划书
  • 邢台网站建设优化江门网站优化公司
  • 哪里有做网站优化的公司二十条优化疫情措施
  • 咸阳软件开发公司说说seo论坛
  • 做投诉网站赚钱吗会计培训机构排名前十
  • 上海网站建设培训互联网推广方式有哪些
  • 股票查询网站模板 wordpress十大流量平台
  • asp网站开发实例pdf微信营销系统
  • 高校支付网站建设费需要入无形资产百度客服电话
  • 网站建设有利点全网推广
  • 网站的手机客户端怎样做怎么查百度收录
  • 政务服务中心 网站建设百度推广需要什么条件
  • 集团公司网站改版方案舆情监测软件免费版
  • 自己做的网站上出现乱码怎么修改湖南广告优化
  • 同ip网站做排名seo百度推广如何代理加盟
  • 网站外链是什么意思辅导机构
  • 建设部网站查询百度搜索引擎的使用方法
  • 做网站设计的总结友情链接你会回来感谢我
  • 网站建站推广新媒体平台
  • 专业建设报告零基础seo入门教学
  • 做一钓鱼网站吗百度关键词优化排名
  • 商城微信网站开发王通seo
  • 二手房交易网站开发源码网络市场的四大特点
  • 重庆建筑模板生产厂家徐州关键词优化排名
  • 水源logo设计制作网南宁市优化网站公司
  • 功能性网站制作专门发广告的app