2016-04-17 2 views
1

Так я создавал таблицу с некоторыми миньонов, которые выглядят следующим образом:Как получить второе наибольшее число без использования LIMIT и OFFSET?

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, это еще можно получить второй по высоте, например атк миньонов?

+1

Я изменил тег на "sql". Укажите, используете ли вы MySQL или SQLite, а затем добавьте соответствующий тег. Кроме того, почему вы не хотите использовать 'limit' и' offset'? –

+0

хотите знать, если это возможно или нет без него –

ответ

2

Чтобы получить второе самое высокое значение можно применить максимум к набору, исключающей значение макс:

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

с данными выборки это будет возвращать Atk = 75.

Но почему бы не использовать функции, такие как ограничение и смещение, когда они доступны?

+0

Почему 'не в''? '<>' будет делать то же самое. –

+0

@PaulSpiegel Хорошая точка, ваше предложение делает запрос более четким. – jpw

+0

@jwp, используя ограничение и смещение, будет не так просто, как 'limit 1 offset 1', если максимальное значение apperas несколько раз. –

Смежные вопросы