【LC刷题系列】【持续更新】数据库刷题

记录下LC刷题的成长,因为断断续续的刷,忘得比较快,记录下

176. 第二高的薪水
题解:

# Write your MySQL query statement below
select (select distinct  Salary as SecondHighestSalary 
from Employee order by Salary DESC limit 1,1) as SecondHighestSalary

考察了limit偏移量的使用:

  • LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1):limit1,10 返回从1行向后偏移10行的内容 ,limit 1,1返回从第一行偏移1行的记录 也就是常规意义上的第二行。
    平时用limit就是用来分页,但是因为limit分页是采用了读取后抛弃制 (猜测是因为B树存储的原因),所以当limit 10000,10 的时候 会特别慢 比如分页处的“跳至尾页” 解决方式了解到有两种:

    select * from table_name where( user = xxx ) limit 10000,10;
    Select * From table_name Where id in (Select id From table_name where ( user = xxx )) limit 10000, 10;
    select * from table_name inner join ( select id from table_name where (user = xxx) limit 10000,10) b using (id);
  • 题目要求:查询不到返回null ,满足这个条件需要使用子查询包裹一下查询语句 或者是直接使用IFNULL函数
  • 因为是需要先排序 所以要考虑到重复的情况 所以使用distinct ,查询最高分之类的sql都应该考虑到重复情况 ,关于排名的优秀文章:https://leetcode-cn.com/problems/nth-highest-salary/solution/mysql-zi-ding-yi-bian-liang-by-luanz/

183. 从不订购的客户
没啥说的 not in+子查询 或者使用连接+ not null


发表回复

蒙ICP备2022000577号-1