数据分析SQL⾯试_⾼频73题(实时更新建议收藏)数据分析岗位⾯试的过程中常考的⾼频73题刷题笔记,不⾜之处望多多指正。
前⾔
⽆论是在数据分析师⾯试还是数据挖掘等的多数⼤数据岗位的⾯试、⼯作过程中,SQL都是⽐较重要的⼀部分,本⽂主要是笔者刷⽜客的⾼频73题时的⼀些笔记整理,欢迎和笔者⼀起交流讨论。
⾯试题
SQL1:查最晚⼊职员⼯的信息
试题内容:查最晚⼊职员⼯的所有信息,为了减轻⼊门难度,⽬前所有的数据⾥员⼯⼊职的⽇期都不是同⼀天(sqlite⾥⾯的注释为–,mysql为comment)
CREATE TABLE employees (
emp_no int(11) NOT NULL, – ‘员⼯编号’
birth_date date NOT NULL,
first_name varchar(14) NOT NULL,
last_name varchar(16) NOT NULL,
gender char(1) NOT NULL,
hire_date date NOT NULL,
PRIMARY KEY (emp_no));
分析:题⽬难度:简单
主要考察where条件查询,需要注意的case是最晚⼊职的员⼯对应的最⼤的hire_date,同时也考虑使⽤order+limit实现最晚员⼯的寻。
mysql面试题sql语句多表联查知识点;ORDER BY field1 [ASC [DESC][默认 ASC]], [field2…] [ASC [DESC][默认 ASC]] (desc降序排列,asc是升序排列) SELECT * FROM table LIMIT a,b;从a+1⾏开始a+b⾏结束。
SQL实现:
思路1
SELECT*FROM employees order by hire_date desc limit0,1
思路2
SELECT*
FROM employees
WHERE hire_date =
(
SELECT MAX(hire_date)
FROM employees
)免费编程入门网课
SQL2:查⼊职员⼯时间排名倒数第三的员⼯所有信息
例题:查⼊职员⼯时间排名倒数第三的员⼯所有信息,为了减轻⼊门难度,⽬前所有的数据⾥员⼯⼊职的⽇期都不是同⼀天CREATE TABLE employees (
emp_no int(11) NOT NULL,
php客服系统
birth_date date NOT NULL,
first_name varchar(14) NOT NULL,
last_name varchar(16) NOT NULL,
gender char(1) NOT NULL,
hire_date date NOT NULL,
PRIMARY KEY (emp_no));
思路:到⼊职时间倒数第三可以使⽤排序order by倒数第三是倒序第3个,可以⽤limit或者offset
SQL实现
# 思路1
select*
from employees
order by hire_date desc
limit2,1
#知识点limit的⽤法
# 思路2
SELECT*FROM employees
ORDER BY hire_date DESC
LIMIT1offset2;
SQL3:查各个部门当前领导当前薪⽔详情
例题:查各个部门当前(_date=‘9999-01-01’)领导当前(_date=‘9999-01-01’)薪⽔详情以及其对应部门编号dept_no
(注:输出结果以p_no升序排序,并且请注意输出结果⾥⾯dept_no列是最后⼀列)
CREATE TABLE salaries (
emp_no int(11) NOT NULL, – ‘员⼯编号’,
salary int(11) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL,
PRIMARY KEY (emp_no,from_date));
CREATE TABLE dept_manager (
dept_no char(4) NOT NULL, – ‘部门编号’
emp_no int(11) NOT NULL, – ‘员⼯编号’
to_date date NOT NULL,
PRIMARY KEY (emp_no,dept_no));
多表连接加排序问题,笔者在这⾥遗漏了时间条件发⽣报错 思路:where条件实先两表连接限制条件+order by实现排序
SQL实现
p_no, salaries.salary, salaries.from_date, _date, dept_manager.dept_no
from dept_manager, salaries
where p_p_no
and _date='9999-01-01'
_date='9999-01-01'
order p_no;
SQL4:查所有已经分配部门的员⼯的last_name和first_name
题⽬:查所有已经分配部门的员⼯的last_name和first_name以及dept_no(请注意输出描述⾥各个列的前后顺序)
CREATE TABLE dept_emp (
emp_no int(11) NOT NULL,
dept_no char(4) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL,
PRIMARY KEY (emp_no,dept_no));
CREATE TABLE employees (
emp_no int(11) NOT NULL,
birth_date date NOT NULL,
flock是什么意思first_name varchar(14) NOT NULL,
last_name varchar(16) NOT NULL,
gender char(1) NOT NULL,
hire_date date NOT NULL,
PRIMARY KEY (emp_no));
branch和load两表查询取交集问题,已分配部分的员⼯的逻辑是两表关于emp_no
select employees.last_name,employees.first_name,dept_emp.dept_no
from employees inner join dept_emp
p_no=p_no;
多表查询问题⽤下图可以帮助⽐较好的理解记忆:
SQL5:查所有员⼯的last_name和first_name以及对应部门编号
“ 问题:查所有员⼯的last_name和first_name以及对应部门编号dept_no,也包括暂时没有分配具体部门的员⼯(请注意输出描述⾥各个列的前后顺序)
CREATE TABLE dept_emp (
emp_no int(11) NOT NULL,
dept_no char(4) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL,
PRIMARY KEY (emp_no,dept_no));
CREATE TABLE employees (
emp_no int(11) NOT NULL,
birth_date date NOT NULL,
first_name varchar(14) NOT NULL,
last_name varchar(16) NOT NULL,
gender char(1) NOT NULL,
hire_date date NOT NULL,
PRIMARY KEY (emp_no));
分析:⾸先需求字段的last_name与first_name来⾃员⼯(employees表)部门编号dept_no来⾃部门表dept_emp,其次关联字段是emp_no,同时⼜题⽬条件:也包括暂时没有分配具体部门的员⼯可得连接⽅式为左连接。
SQL求解:
select employees.last_name
,employees.first_name
,dept_emp.dept_no
from employees left outer join dept_emp
p_no=p_no;
SQL6:查所有员⼯⼊职时的薪⽔情况
问题内容:
查所有员⼯⼊职时候的薪⽔情况,给出emp_no以及salary, 并按照emp_no进⾏逆序(请注意,⼀个员⼯可能有多次涨薪的情况) CREATE TABLE employees (
emp_no int(11) NOT NULL,
birth_date date NOT NULL,
first_name varchar(14) NOT NULL,
last_name varchar(16) NOT NULL,
gender char(1) NOT NULL,
hire_date date NOT NULL,
PRIMARY KEY (emp_no));
CREATE TABLE salaries (
emp_no int(11) NOT NULL,
salary int(11) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL,
PRIMARY KEY (emp_no,from_date));
分析:条件(1)查询的是员⼯⼊职时的⼯资情况这时应从员⼯表⾥获取emp_no和其对应的hire_date在与⼯资表(salaries的from_date相关联);
条件(2)按emp_no逆序,oeder by xxx dec
SQL实现
SELECT
s.salary
FROM
employees AS e
INNER JOIN salaries AS s
p_no = s.emp_no
AND e.hire_date = s.from_date
ORDER BY
SQL7:查薪⽔变动超过15次的员⼯
有⼀个薪⽔表,salaries简况如下:
建表语句如下:
CREATE TABLE`salaries`(
`emp_no`int(11)NOT NULL,
`salary`int(11)NOT NULL,
`from_date`date NOT NULL,
滚动条填充样式
`to_date`date NOT NULL,
PRIMARY KEY(`emp_no`,`from_date`));
请你查薪⽔变动超过15次的员⼯号emp_no以及其对应的变动次数t,以上例⼦输出如下:
思路:需求拆分通过对员⼯分组并对salary进⾏去重计数得到每个员⼯的薪⽔变化次数,再⽤where过滤出薪⽔变动超过15次的员⼯。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。