美文网首页
sql面试题6 滴滴出行二面笔试题

sql面试题6 滴滴出行二面笔试题

作者: 美琦miki视觉笔记 | 来源:发表于2020-03-20 20:02 被阅读0次

转载的,加一些自己的思考。

滴滴出行二面笔试题

开心鸭

一个玩数据分析的鸭鸭

已关注

8 人赞同了该文章

在喝奶茶的时候突然收到一封邮件,猝不及防的开始了滴滴出行国际部二面笔试。感觉题目还是比较基础的,我以为会有什么留存率一些比较困难的业务题,慌的我喝了几杯水,没想到十分钟就做完了,中途还接了个推销电话..

学生表:tb_student(name:学生姓名,id:学号,class:班级,in_time:入学时间,age:年龄,sex:性别,major:专业)

1)学生成绩表:tb_score(id:学号,course:课程,score:分数)

1. 筛选出2017年入学的“计算机”专业年龄最小的10位同学名单(姓名、学号、班级、年龄)

select name,id,class,age

from tb_student

where in_time='2017' and major='计算机'

order by age asc

limit 10

2.统计每个班同学各科成绩平均分大于80分的人数和人数占比

select c.class,

sum (case when c.avg_score >80 then 1 else 0 end) as ' 每个班同学各科成绩平均分大于80分的人数',

sum (case when c.avg_score >80 then 1 else 0 end)/count(c.id) as ' 每个班同学各科成绩平均分大于80分的人数占比',

from

(select a.id,a.class,avg(b.score) as avg_score

from tb_student  a inner join tb_score b on a.id=b.id

group by 1)c

group by 1

参考:SELECT a.class,

sum(case when aaa.x > 80 then 1 else 0 end)as num_80 ,

(sum(case when aaa.x > 80 then 1 else 0 end)/count(*))as proportion

from tb_student a

INNER JOIN (SELECT id,avg(score)as x from tb_score GROUP BY id)as aaa

on a.id = aaa.id

GROUP BY class;

解析:写一个子查询,从score表中得到以学号分组的学生各科平均分。命名为aaa,将其与学生表内联结。再以class分组,得到以class分组的各班学生的平均分,最后通过case语句,sum聚合函数得到平均分>80分的计数,和所占各班总人数比例。

2)用户教育经历表:tb_user_edu(uid:用户id,star_date:入学时间,end_date:毕业时间,degree:学历,school:学校,major:专业)

3)table1(id:自增id,money:费用)问题:按id顺序累加money,取出累计值与1000相差最小差值的id。

select id

from(

select id,abs(1000-sum(money) over(order by id))as sub

from money

order by sub )a

limit 1

这个重要!

4) Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 DepartmentId。

+----+-------+--------+--------------+

| Id | Name | Salary | DepartmentId |

+----+-------+--------+--------------+

| 1 | Joe | 70000 | 1 |

| 2 | Henry | 80000 | 2 |

| 3 | Sam | 60000 | 2 |

| 4 | Max | 90000 | 1 |

Department 表包含公司所有部门的信息。

+----+----------+

| Id | Name |

+----+----------+

| 1 | IT |

| 2 | Sales |

+----+----------+

编写一个 SQL 查询,找出每个部门工资第二高的员工。

seelct c.id

(select a.deparmentid,rank( ) over (partition by a.departmentid order by a.salary desc ) as rank_

employee a  inner join department  b on a.id=b.id)c

where c.rank_=2

写错了,emm 最开始好像并不需要join

相关文章

网友评论

      本文标题:sql面试题6 滴滴出行二面笔试题

      本文链接:https://www.haomeiwen.com/subject/sxcsyhtx.html