100天SQL面试刷题 Day004

这篇具有很好参考价值的文章主要介绍了100天SQL面试刷题 Day004。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先看题目自己试着解一下,有困难的同学可以先看考点解析试下,
最后再看SQL解答,有不同意见和解法的欢迎评论区留言交流


来源:大厂面试真题

题目:

表salary info包含以下字段
person id: 员工号(主键)
age: 年龄
department: 部门 (包含市场部和销售部两个部门)
salary: 薪资

(1)分别查询市场部和销售部工资最高的员工,并返回员工的department、 person id、age和salary。如果同部门工资最高的员工存在多个,则返回多个。

(2)分别查询市场部和销售部Top 5工资对应的所有员工,并返回员工的department、person id、age和salary。例如,市场部最高工资是10000,一共有3名员工的工资是10000,则应把这3名员工全部取出,以此类推。

(3)分别查询市场部和销售部年龄最大的10名员工,并返回员工的department、 person id、age和salary。如果同一部门年龄相同的员工存在多个,则按照person id从小到大排序来取。例如,年龄从大到小排序,发现排在第10的员工是50岁,而50岁的员工有多个,则再按person id升序排序,取到10名员工停止。
题目数据下载

结果输出

Q1执行结果
100天SQL面试刷题 Day004,MYSQL面试刷题,sql,面试,数据库
Q2执行结果
100天SQL面试刷题 Day004,MYSQL面试刷题,sql,面试,数据库

Q3执行结果

100天SQL面试刷题 Day004,MYSQL面试刷题,sql,面试,数据库

考点解析

对窗口函数中的三个序号函数的理解和用法。
ROW NUMBERO:排序,不会有重复的排序数值。对于相等的两个数字,排序序号不一致
RANK0是跳跃排序,即如果有两条记录重复接下来是第三级别如:1224会跳过3
DENSE RANKO是连续排序即如果有两条记录重复,接下来是第二级别如:1223文章来源地址https://www.toymoban.com/news/detail-522731.html

SQL代码

#第一题解法1:开窗rank
select
  a.department,a.person_id,a.age,a.salary from (
select * , rank() over
  (partition by 
department order by salary
  desc) as r
from train.salary_info) as a
where a.r =1;
 
# 第一题解法1:开窗dense_rank
select
  a.department,a.person_id,a.age,a.salary from (
select * , dense_rank() over
  (partition by 
department order by salary
  desc) as r
from train.salary_info) as a
where a.r =1;
 
# 第一题解法2:原表匹配最大salary
# goupby + max
  找到各部门最大的salary,原表判断=最大salary的数据
SELECT * FROM
  train.salary_info a
left join (
SELECT department,max(salary)
  as m FROM train.salary_info
group by department) tmp
on a.department =
  tmp.department
where salary = m;
 
# 第一题解法2:原表匹配最大salary
# order by + groupby找到各部门最大的salary
#limit 10000000000 是必须要加的,如果不加的话,数据不会先进行排序
select t.* from(
SELECT * FROM
  train.salary_info
order by salary desc limit
  10000000000) t 
group by t.department;
 
# 第一题解法3:关联子查询,
#先使用关联子查询把相同部门的员工归在一起,然后条件筛选出比各个员工工资高的员工
SELECT department, person_id,
  salary
FROM  train.salary_info t
WHERE (SELECT COUNT(DISTINCT
  e.salary)
       FROM 
  train.salary_info AS e
       WHERE e.department = t.department
       AND e.salary > t.salary) = 0;


#
  第二题:解法1.开窗函数-dense_rank
select
  t.department,t.person_id, t.age,t.salary from(
SELECT *,dense_rank() over(
partition by department
order by salary desc) as r
FROM train.salary_info) t
where t.r <= 5;
 
# 第二题:解法2.引入变量+if排序 (并列不占用)
set @rk=0,@d=null,@s=null;
select
  tmp.department,tmp.person_id, tmp.age,tmp.salary from (
select 
 t.department,t.person_id, t.age,t.salary,
 @rk :=
  if(@d=department,if(@s=salary,@rk,@rk+1),1) rk ,
 @d := department,
 @s :=salary
from train.salary_info t
order by t.department,t.salary
  desc) tmp
where tmp.rk <=5;


#第三题:解法1. row_number 排序
select department,person_id,age,salary from (
select *,
row_number() over(partition by department
 order by age desc,person_id) r
 from salary_info) tmp 
 where r <=10

#第三题 解法1.窗口函数lag前几
#考察窗口大小
--lag(col,n,default)用于统计窗口内往上第n个值。
--col:列名;n:往上第n行;default:往上第n行为NULL时候,取默认值,不指定则取NULL
select
  tmp.department,tmp.person_id,tmp.age,tmp.salary from(
select *,
lag(age,10) over(
partition by department
order by age desc,person_id
) a
from train.salary_info
) tmp
where a is null;


到了这里,关于100天SQL面试刷题 Day004的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL面试必备:100道高频考题解析

    前言 在众多IT职场中,SQL技术一直是一个非常重要的技能点。如果你正在准备SQL相关的面试,那么这份“SQL面试 100 问”绝对是你不能错过的宝藏! 这份清单涵盖了100道高频考题,从基础知识到复杂应用都有所涉及,帮助你全面掌握SQL面试必备技能,轻松应对各种挑战。 同时

    2024年02月06日
    浏览(68)
  • ChatGPT实战100例 - (08) 数据库设计转化为SQL并获取ER图

    在你还在手撸SQL?ChatGPT笑晕在厕所 这篇博文中 针对经典3表设计: 学生表 S(SNO,SNAME,AGE,SEX),其属性表示学生的学号、姓名、年龄和性别; 选课表 SC(SNO,CNO,GRADE),其属性表示学生的学号、所学课程的课程号和成绩; 课程表 C(CNO,CNAME,TEACHER),其属性表示课程

    2024年02月10日
    浏览(48)
  • AI面试官:SQL Server数据库(三)

    当涉及到.NET工程师中关于SQL Server数据库的面试题时,主要考察候选人的数据库知识、SQL查询能力、数据库设计和优化等方面。 解答:数据库并发控制是为了确保多个用户同时访问数据库时,数据的一致性和正确性。常见的数据库并发控制机制包括锁机制、事务隔离级别和乐

    2024年02月14日
    浏览(42)
  • AI面试官:SQL Server数据库(一)

    当涉及到.NET工程师中关于SQL Server数据库的面试题时,主要考察候选人的数据库知识、SQL查询能力、数据库设计和优化等方面。 解答:数据库是用于存储和管理数据的集合。数据库管理系统 (DBMS) 是一种软件,用于管理数据库的创建、查询、更新和删除等操作。数据库系统指

    2024年02月14日
    浏览(42)
  • AI面试官:SQL Server数据库(二)

    当涉及到.NET工程师中关于SQL Server数据库的面试题时,主要考察候选人的数据库知识、SQL查询能力、数据库设计和优化等方面。 解答:数据库锁是用于管理并发访问数据库的机制,它可以确保在同一时刻只有一个事务可以修改共享数据,从而避免数据的不一致性和冲突。常见

    2024年02月14日
    浏览(44)
  • 【100天精通python】Day32:使用python操作数据库_MySQL下载、安装、配置、使用实战

    目录  专栏导读  1 MySQL概述 2 MySQL下载安装 2.1 下载  2.2 安装 2.3 配置

    2024年02月12日
    浏览(49)
  • 主流数据库(SQL Server、Mysql、Oracle)通过sql实现多行数据合为一行

    1、方法一:使用 STUFF 和 FOR XML PATH 进行多行合并成一行 (1)FOR XML PATH用法 FOR XML 是 SQL Server 提供的一种功能,允许您将查询结果转换为 XML 格式。 PATH 模式则是其中一种灵活的方式来构造自定义的XML结构。 1、基本字符串连接 : 当您想从单列中提取所有行的数据并连接成一

    2024年04月10日
    浏览(65)
  • 【MySQL数据库】MySQL 高级SQL 语句一

    ) % :百分号表示零个、一个或多个字符 _ :下划线表示单个字符 ‘A_Z’:所有以 ‘A’ 起头,另一个任何值的字符,且以 ‘Z’ 为结尾的字符串。例如,‘ABZ’ 和 ‘A2Z’ 都符合这一个模式,而 ‘AKKZ’ 并不符合 (因为在 A 和 Z 之间有两个字符,而不是一个字符)。 ‘ABC%’

    2024年02月09日
    浏览(251)
  • 【MySQL 数据库】7、SQL 优化

    ① 批量插入数据 ② 手动控制事务 ③ 主键顺序插入,性能要高于乱序插入 主键乱序插入 : 8 1 9 21 88 2 4 15 89 5 7 3 主键顺序插入 : 1 2 3 4 5 7 8 9 15 21 88 89 【☆】 】 ① 如果需要一次性插入大批量数据(百万级别),使用 insert 语句插入性能 很低 ② 可使用 MySQL 数据库提供的 loa

    2024年02月08日
    浏览(60)
  • 【数据库】MySQL 高级(进阶) SQL 语句

    location表格创建 store_info表格创建 显示表格中一个或数个字段的所有数据记录 不显示重复的数据记录 按照条件进行查询 在已知的字段数据取值范围内取值 另外还有not in命令,用法一致,表示显示不在指定范围内的字段的值。 在两个字段数据值之间取值,包含两边字段的数据

    2024年02月09日
    浏览(137)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包