我真的很困惑这个查询需要返回在partircular collumn上具有最大值的前N行。
例如,如果行N-1, N, N + 1
具有相同的值。我必须返回just top N
或top N + 1
行。
答案 0 :(得分:29)
如果你这样做:
select *
from t
order by value desc
limit N
您将获得前N行。
如果你这样做:
select *
from t join
(select min(value) as cutoff
from (select value
from t
order by value
limit N
) tlim
) tlim
on t.value >= tlim;
或者你可以更简单地说这个:
select *
from t join
(select value
from t
order by value
limit N
) tlim
on t.value = tlim.value;
以下概念上是您想要做的,但它可能在MySQL中不起作用:
select *
from t
where t.value >= ANY (select value from t order by value limit N)
答案 1 :(得分:2)
使用以下SQL查询。
SELECT salary FROM salesperson
ORDER BY salary DESC
LIMIT 2,1
答案 2 :(得分:2)
您应该使用自联接。
例如在下面的样本表
CREATE TABLE `employee` (
`ID` INT(11) AUTO_INCREMENT PRIMARY KEY,
`NAME` VARCHAR(50) NOT NULL,
`SALARY` INT(11) NOT NULL ,
JOINING_DATE TIMESTAMP
) ENGINE=MYISAM
INSERT INTO employee (NAME,salary,joining_date) VALUES('JAMES',50000,'2010-02-02'),
('GARGI',60000,'2010-02-02'),('DAN',30000,'2010-02-02'),('JOHN',10000,'2010-02-02'),('MICHEL',70000,'2010-02-02'),
('STIEVE',50000,'2010-02-02'),('CALRK',20000,'2010-02-02'),('BINNY',50000,'2010-02-02'),('SMITH',40000,'2010-02-02'),
('ROBIN',60000,'2010-02-02'),('CRIS',80000,'2010-02-02');
使用上面的表格数据设置查找具有前三名薪水的员工将是:
SELECT e1.* FROM
(SELECT DISTINCT salary FROM Employee ORDER BY salary DESC LIMIT 3 ) S1
JOIN employee e1
ON e1.salary = s1.salary
ORDER BY e1.salary DESC
提示: -
如果您需要前4名,则只需将LIMIT 3
更改为LIMIT 4