如何在不使用 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,然后添加适当的标签。另外,你为什么不想使用limit
和offset
?
想知道没有它是否可能
【参考方案1】:
要获得第二高的值,您可以将 max 应用于排除最大值的集合:
select max(atk) from Minion where atk <> (select max(atk) from Minion)
使用您的示例数据,这将返回 atk = 75。
但既然limit和offset等功能可用,为什么不使用呢?
【讨论】:
为什么是not in
? <>
也可以。
@PaulSpiegel 好点,您的建议使查询更清晰。
@jwp,如果最大值出现多次,使用limit和offset不会像limit 1 offset 1
那么容易。
@PaulSpiegel 除非你先申请distinct
; select 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 查询选择所有记录