19年数据分析就业能力考察

就业班开办初衷
课程学习同学进度跟踪(持续更新)
就业班同学转行成功经验分享
就业班BI案例介绍

      测试题共分为三部分,sql + python + 动手,不需要全部能做对,目的只是为了检测大家的一个学习能力和基础水平,因为就业班的课程第一部分就是对基础强化,学完之后这些题目都不是问题,需要大家做这些题目的时候有编程的思路知道大概sql可以用什么关联、python 可以用哪些语法或者函数来实现就好,而不是会怕做看都不想看,不然后面项目的探索环节特别容易放弃。做完后把得分情况发给助教(例如:sql:60+python:60+动手:60)能做的题目越多基础越好。

一、SQL 部分

数据表
--1.学生表 Student(SId,Sname,Sage,Ssex)--SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
--2.课程表 Course(CId,Cname,TId) --CId --课程编号,Cname 课程名称,TId 教师编号
--3.教师表 Teacher(TId,Tname) --TId 教师编号,Tname 教师姓名
--4.成绩表 SC(SId,CId,score) --SId 学生编号,CId 课程编号,score 分数
创建测试数据
学生表 Student:
导入数据方法:将以下 mysql 语句,完整复制到 workbench 语句窗口(或者是 mysql 的黑窗口),然后运行即可导入,不需要另外创建表,下面表的操作一样。这些语句第一条是创建表(create table),后面都是插入数据到表中(insert into table )。

create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));
insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
insert into Student values('02' , '钱电' , '1990-12-21' , '男');
insert into Student values('03' , '孙风' , '1990-05-20' , '男');
insert into Student values('04' , '李云' , '1990-08-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吴兰' , '1992-03-01' , '女');
insert into Student values('07' , '郑竹' , '1989-07-01' , '女');
insert into Student values('09' , '张三' , '2017-12-20' , '女');
insert into Student values('10' , '李四' , '2017-12-25' , '女');
insert into Student values('11' , '李四' , '2017-12-30' , '女');
insert into Student values('12' , '赵六' , '2017-01-01' , '女');
insert into Student values('13' , '孙七' , '2018-01-01' , '女');

科目表 Course

create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10));
insert into Course values('01' , '语文' , '02');
insert into Course values('02' , '数学' , '01');
insert into Course values('03' , '英语' , '03');

教师表 Teacher

create table Teacher(TId varchar(10),Tname varchar(10));
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');

成绩表 SC

create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));
insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 80);
insert into SC values('03' , '01' , 80);
insert into SC values('03' , '02' , 80);
insert into SC values('03' , '03' , 80);
insert into SC values('04' , '01' , 50);
insert into SC values('04' , '02' , 30);
insert into SC values('04' , '03' , 20);
insert into SC values('05' , '01' , 76);
insert into SC values('05' , '02' , 87);
insert into SC values('06' , '01' , 31);
insert into SC values('06' , '03' , 34);
insert into SC values('07' , '02' , 89);
insert into SC values('07' , '03' , 98);

练习题目
1、查询「李」姓老师的数量(5分)
2、查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 (10分)
3、查询同时存在" 01 "课程和" 02 "课程的情况 (5分)
4、查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null ) (10分)
5、查询不存在" 01 "课程但存在" 02 "课程的情况(15分)
6、查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩(20分)
7、查询在 SC 表存在成绩的学生信息(15分)
8、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )(20分)

二、python 部分

1、用户从终端输入一个分数,程序输出这个分数所属的考评等级,90到100分是A,60到89是B,60分以下是C。(15分)

2、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和(15分)

3、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。(20分)

4、请用面对对象的思想编写一个小游戏,人狗大站,2个角色,人和狗,游戏开始后,生成2个人,3条狗,互相混战,人被狗咬了会掉血,狗被人打了也掉血,狗和人的攻击力,具备的功能都不一样。(25分)

5、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?(25分)

三、动手探索部分

1、把 user_info_utf.csv 数据导入到自己的 mysql 库中,根据数据文件自己创建 user_info 表。(40分)
2、python 读取文件 order_info_utf.csv 保存到 mysql 库中(60分)
资料:链接:https://pan.baidu.com/s/1eKcTQ-qC8Qu2gz7LYXGJNg 提取码:ck9z

参考答案

一、SQL部分
1.查询「李」姓老师的数量

select
*
from teacher
where tname like '李%';

2.查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数

select * 
from sc a 
left join student d
    on a.sid=d.sid 
inner join sc b 
    on a.sid=b.sid and a.cid='01' and b.cid='02'
where a.score>b.score;
  1. 查询同时存在" 01 "课程和" 02 "课程的情况
select * 
from sc a 
inner join sc b 
    on a.sid=b.sid and a.cid='01' and b.cid='02';

4.查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )

select * 
from sc a 
left join sc b 
    on a.sid=b.sid  and b.cid='02'
where a.cid='01';
  1. 查询不存在" 01 "课程但存在" 02 "课程的情况
select * 
from sc a 
where sid not in(select sid from sc where cid='01')
and cid='02';

6.查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩

select 
a.sid,
d.sname,
avg(score) as s_avg
from sc a
left join student d
on a.sid=d.sid
group by a.sid
having s_avg>60;

7.查询在 SC 表存在成绩的学生信息

select 
    b.*
from sc a
left join student b
on a.sid=b.sid
group by a.sid;

8.查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为null)

select 
a.sid,
a.sname,
count(b.cid) as cons,
sum(b.score) as cours
from student a
left join sc b
on a.sid=b.sid
group by a.sid;

二、Python部分
题目1答案:分数等级划分

while True:
    score = input('input score:\n')
    if score == 'stop':
        break

    score = int(score)
    if score >= 90:
        grade = 'A'
    elif score >= 60:
        grade = 'B'
    else:
        grade = 'C'

    print ('{score} belongs to {grade}'.format(score=score,grade=grade))
while True:
    score = input('input score:\n')
    if score == 'stop':
        break

    score = int(score)
    if score >= 90:
        grade = 'A'
    elif score >= 60:
        grade = 'B'

方法2

while True:
    score = input('input score:\n')
    if score == 'stop':
        break

    score = int(score)
    if score >= 90:
        grade = 'A'

    if score >= 60 and score<90:
        grade = 'B'

    if score < 60:
        grade = 'C'

    print ('{score} belongs to {grade}'.format(score=score,grade=grade))

题目2答案:分数求和

up = 2
down = 1
sum = 0
for i in range(20):
    sum += up/down
    tmp = up
    up = up + down
    down = tmp

print (sum)

题目3答案:猴子吃桃

total = 1
for day in range(9,0,-1):
    total = (total+1)*2

print (total)

方法2

current = 1
for day in range(9,0,-1):
    yestoday = (current+1)*2
    current = yestoday

print (yestoday)

题目4:人狗大战

class People():
    agressivity = 10
    life_value = 100

    def __init__(self,name):
        self.name = name

    def attack(self,dog):
        dog.life_value -= 10

    def __str__(self):
        return '人%s剩余生命值:%s,状态值%s'%(self.name,self.life_value,self.agressivity)


class Dogs():
    agressivity = 15
    life_value = 80

    def __init__(self,name):
        self.name = name

    def attack(self,people):
        people.life_value -= 10

    def __str__(self):
        return '狗%s剩余生命值:%s,状态值%s'%(self.name,self.life_value,self.agressivity)

p1 = People('Tom')
p2 = People('Jack')
d1 = Dogs('niker')
d2 = Dogs('geeker')
d3 = Dogs('chaox')

print(p1)
print(p2)

p1.attack(d1)

print(d1)

题目5:弹小球

# 初始高度
height = 100
# 第一次弹起前的距离,初始化
highs = height
# 第2次能弹起来的高度
height = height / 2

for i in range(2, 11):
    # 第2次弹起来的距离,是弹起高度的来回
    highs += height * 2
    # 准备下一次的高度
    height /= 2

print(height,highs)
结果:
0.09765625 299.609375

注意是从第2次弹起来开始计算,因为第一次弹起不具备循环

推荐阅读更多精彩内容