数据科学岗位的一道基础笔试题

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

问题描述

前些时日,在玩手机的时候,偶然看到了一个博主的推文。文章的题目中,提到了 “竟然连SQL 都不会 ”。 由于这段时间在学习数据库,所以对于SQL 等字眼特别敏感。所以,对于这篇文章,我自然要读一读。

文章中讲到的其他方面这里不再过多的赘述。我从里面 c opy 出了一道求职相关岗位时,会遇到的一道基础笔试题。我将在本文中对该题进行详细的解答。

题目如下:

这里有一个成绩信息表info_table,每条记录是学生的某科目成绩信息,包括学生学号stu_num、科目名称sub_name、学生的该科目分数score等字段,请你写个SQL取一下每个科目分数前三的学生信息。

解决方案

相信大家都已读了题目,为了方便大家的理解以及接下来对相应 S QL 语句的验证,我们这里使用 S QL S erver  Studio 进行演示。

首先,我们先按照题目建库建表。

create database course;

use course;

create table info_table(

stu_num char(20) primary key,

stu_name char(10),

score int check(score between 0 and 100)

)

1   数据库及表

我为了后续的验证的方便,这里就再向该表中插入数据。三个科目( M ath、 English PE ),学生 5人(001-005)。

这里需要注意的是,因为 PRIMARY KEY 约束 'PK__info_tab__89C2F6B20425A276' ,所以在第一列 s ub_num 就不能出现重复。这里我们将键 PK__info_tab__89C2F6B20425A276 直接删除就好。数据插好后的表如下:

图二 info _table 表的所有数据

准备工作就绪,现在就正式开始查询。在查询前,我们要明确三个问题:查什么?从哪里查?条件是什么?通过题目,显然有:查的是学生信息,从 info_table表中查,条件是每个科目分数第一。我给出的查询如下:

select *

from(

select stu_num,sub_name,score,row_number()

over(

partition by sub_name

order by score desc

)

as num

from info_table

)

T where T.num <= 3

order by sub_name

图三 查询结果

结语

对于S QL ,基础的语法学起来很简单,简单的查询上手也很容易。难就难在如何根据具体需求去写查询,并且为了达到同一查询目的,S QL 语句并不唯一,这时你是否又能选出最佳的那一个呢?俗话说的好,“基础不扎实,地动山摇。”对于S QL 我们一定要夯实基础,再进行熟练掌握。祝你成功!

END

实习编辑   |   王文星

责       编   |   李劲潮

where2go 团队

   

微信号:算法与编程之美          

长按识别二维码关注我们!

温馨提示: 点击页面右下角 “写留言”发表评论,期待您的参与!期待您的转发!

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章