我发现使用order by with limit来从数据库中获取第二高的工资。可以从大数据中提取数据库性能,而不是使用子查询。我想知道如何从第二个获取所有工资最高薪水。我创建了像& amp; db name = one
id salary
1 50
2 20
3 70
4 40
5 85
现在只找到第二高薪
select salary from one order by salary desc limit 1,1
找到第二,第三和第四的工资
select salary from one order by salary desc limit 2,1
如何在不知道第二个限制值的情况下从第二高位开始获取所有薪水。
感谢
答案 0 :(得分:1)
只需使用非常非常大的价值:
select salary
from one
order by salary desc
limit 99999999 offset 1;
或者,您可以计算它:
select salary
from one
where salary < (select min(salary) from one)
使用one(salary)
上的索引时,这两种方法都会运行得更快。
而且,两者之间存在细微差别。第一个将返回第二个薪水,即使等于最高薪水。第二个版本将返回第二高薪,无论重复多少。
答案 1 :(得分:1)
您只需将查询用作
即可select salary from one
where salary > (select min(salary) from one)
答案 2 :(得分:0)
工作正常
select salary from one
where salary < (select max(salary) from one)
但是如何仅使用限制?
答案 3 :(得分:0)
使用mysql的偏移功能:
由于您要选择从第2高到最后的工资,您可以使用以下查询:
select salary from one order by salary desc limit 18446744073709551615 offset 1
PS:18446744073709551615 = 2 ^ 64-1(参考Mysql Offset Infinite rows)