MySQL 查询第n个最大记录
在本节中,我们将学习如何借助各种技术在数据库表中选择第 n 个最高记录。
通过使用MAX()或MIN() 函数,我们可以很容易地获取数据库表中的最大(最高)或最小(最低)记录。但是假设我们要从表中获取第 n 高的记录(例如,从雇员表中获取第二贵的薪水)。在这种情况下,没有可用的功能可以快速找到它,这使得它变得复杂。
通过执行以下步骤,我们可以选择MySQL数据库表中的第 n 个最高记录:
1. 第一步是将所需列按升序排序,得到 n 最高的记录,也就是结果输出中的最后一条记录。请参阅以下查询:
SELECT * FROM table_name ORDER BY colm_name ASC LIMIT N;
2. 之后,我们需要对结果输出进行降序排序,得到第一条记录。
SELECT * FROM (
SELECT * FROM table_name
ORDER BY colm_name ASC LIMIT N) AS temp_table
ORDER BY colm_name DESC LIMIT 1;
上面的查询也可以通过使用限制结果输出中的行数的LIMIT子句来重写,如下所示:
SELECT * FROM table_name ORDER BY colm_name DESC LIMIT n - 1, 1;
此查询将返回应该是第 n 个最高记录的n-1 行之后的第一行。
示例
让我们通过一个示例来了解如何从表中获取第 n 个最高记录。首先,我们将使用以下查询创建一个Employee表:
CREATE TABLE Employee (id int, name varchar(40), salary int);
接下来,使用以下查询插入记录:
INSERT INTO Employee VALUES
(1, 'Mike', 3000),
(2, 'John', 4000),
(3, 'Shane', 3000),
(4, 'Biden', 5000),
(5, 'Bravo', 7000);
执行SELECT语句验证记录:
假设我们想在Employee表中获得第二高的雇员(n = 2);我们可以使用以下语句:
mysql> SELECT name, salary FROM Employee ORDER BY salary DESC LIMIT 1, 1;
我们将看到如下输出:
假设我们想在Employee表中得到一个雇员(n = 3)的第三高薪水;我们可以使用以下语句:
mysql> SELECT name, salary FROM Employee ORDER BY salary DESC LIMIT 2, 1;
我们将看到如下输出:
使用子查询获取第 n 个最高记录
我们还可以借助子查询获得第 n 高的记录,子查询依赖于主查询并针对主查询返回的每条记录进行处理。这种技术很少使用,因为它的性能/执行速度很慢。
请参阅以下使用子查询返回第 n 个最高记录的查询:
SELECT name, salary FROM Employee AS emp1
WHERE N-1 = (SELECT COUNT(DISTINCT salary) FROM Employee emp2
WHERE emp2.salary > emp1.salary)
请参阅下面的查询,该查询使用子查询从员工表中返回第二高的薪水:
SELECT name, salary FROM Employee AS emp1
WHERE 2-1 = (SELECT COUNT(DISTINCT salary) FROM Employee AS emp2
WHERE emp2.salary > emp1.salary);
我们将得到上一个查询返回的相同输出:
热门文章
优秀文章