【问题标题】:How to get the 2nd highest number without using LIMIT and OFFSET?如何在不使用 LIMIT 和 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
  • 想知道没有它是否可能

标签: sql sqlite greatest-n-per-group


【解决方案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; 应该可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 2018-01-18
  • 2011-06-11
  • 2013-09-27
  • 2020-08-10
相关资源
最近更新 更多