如何在不使用 LIMIT 和 OFFSET 的情况下获得第二高的数字?

Posted

技术标签:

【中文标题】如何在不使用 LIMIT 和 OFFSET 的情况下获得第二高的数字?【英文标题】:How to get the 2nd highest number without using LIMIT and OFFSET? 【发布时间】:2016-08-09 04:01:48 【问题描述】:

所以我正在创建一个带有一些小兵的表格,如下所示:

CREATE TABLE Minion(MinionID varchar(10), gold int, Atk int, def int);

带有值:

INSERT INTO Minion VALUES ('min001', 15, 5, 20);
INSERT INTO Minion VALUES ('min002', 20, 7, 30);
INSERT INTO Minion VALUES ('min003', 18, 8, 17);
INSERT INTO Minion VALUES ('min004', 30, 15, 100);
INSERT INTO Minion VALUES ('min005', 5, 3, 9);
INSERT INTO Minion VALUES ('min006', 60, 23, 150);
INSERT INTO Minion VALUES ('min007', 10, 8, 20);
INSERT INTO Minion VALUES ('min008', 65, 40, 250);
INSERT INTO Minion VALUES ('min009', 300, 75, 550);
INSERT INTO Minion VALUES ('min010', 300, 65, 600);
INSERT INTO Minion VALUES ('min011', 300, 80, 400);

所以我想知道,如果没有 LIMIT 和 OFFSET,是否仍然有可能获得第二高,例如小黄人的攻击力?

【问题讨论】:

我将标签更改为“sql”。请指定您使用的是 mysql 还是 SQLite,然后添加适当的标签。另外,你为什么不想使用limitoffset 想知道没有它是否可能 【参考方案1】:

要获得第二高的值,您可以将 max 应用于排除最大值的集合:

select max(atk) from Minion where atk <> (select max(atk) from Minion)

使用您的示例数据,这将返回 atk = 75。

但既然limit和offset等功能可用,为什么不使用呢?

【讨论】:

为什么是not in&lt;&gt; 也可以。 @PaulSpiegel 好点,您的建议使查询更清晰。 @jwp,如果最大值出现多次,使用limit和offset不会像limit 1 offset 1那么容易。 @PaulSpiegel 除非你先申请distinctselect distinct atk from Minion order by atk desc limit 1 offset 1; 应该可以正常工作。

以上是关于如何在不使用 LIMIT 和 OFFSET 的情况下获得第二高的数字?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 2005 中使用 LIMIT [X] OFFSET [Y] [重复]

在WIN32系统中,如何在不使用LARGE_INTEGER数据的情况下以重叠结构递增文件指针的n个字节?

使用 SQL LIMIT 和 OFFSET 查询选择所有记录

laravel 自定义分页 offset 和 limit 的使用

分页场景(limit,offset)为什么会慢?

LIMIT和OFFSET