我在mysql中有表(姓名"朋友"),我想从该表中选择第二或第三或第四最高金额(即工资)。
我正在使用这种方法:
`select * from friends order by salary desc limit 1; -- for highest salary.`
和
`select * from friends order by salary desc limit 1 offset 1; -- for second highest salary.`
和
`select * from friends order by salary desc limit 1 offset 2; -- for third highest salary.`
这个方法是正确的还是我必须使用其他逻辑方法,如。
`select * from friends where salary = (select max(salary) from friends where salary < (select max(salary) from friends)); -- for second highest salary`.
请告诉我哪种是专业方法。
答案 0 :(得分:0)
偏移的限制是首选,更多的是legibale;
select *
from friends
order by salary desc
limit 3,1;
答案 1 :(得分:0)
两种方法的区别在于时间复杂度
在一般意义上,排序(或按顺序执行)仅查看最高或次高,或者就时间而言是过度的。想想如果你想找到列表中最大的元素,你会想要整理整个列表并在排序后查看第一个元素,或者循环遍历列表以找到最大的元素。
没有正确的方法,这取决于你是否能够花更多的时间来获得解决方案,支持更可读的查询,这反过来又取决于数据的大小等。