177-N-Highest-Salary
Last updated
Was this helpful?
Last updated
Was this helpful?
编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。 +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+
这道题不是很难,只是mysql的语法不太熟悉。首先回顾以下limit
的用法。limit
可以接受两个参数:limitoffset
,limit
。
offset表示偏移量,从0开始计算。并且只能是常量,不能写运算表达式
limit表示从offset开始查询的条数
limit有一个缺陷就是数据量很大时,越往后后页的效率越慢,limit 1,10
和limit 10000,10
的区别还是比较明显的。例如下面的:
SQL代码1:平均用时6.6秒 SELECT * FROM
cdb_posts
ORDER BY pid LIMIT 1000000 , 30SQL代码2:平均用时0.6秒 SELECT * FROM
cdb_posts
WHERE pid >= (SELECT pid FROMcdb_posts
ORDER BY pid LIMIT 1000000 , 1) LIMIT 30
所以一种优化策略就是当要查询的数据很靠后时,我们可以先定义查询一个目标位置的子查询,然后再从查询到的位置开始获取limit条数据。
mysql里的if还要end if一下,不错不错。