2016-04-17 15 views
1

So wurde ich eine Tabelle mit einigen Günstlingen zu schaffen, die wie folgt aussehen:Wie bekomme ich die zweithöchste Nummer ohne LIMIT und OFFSET?

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

mit den Werten:

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); 

Also habe ich mich gefragt, ohne LIMIT und OFFSET, ist es noch möglich zu erhalten die zweithöchste z atk der Schergen?

+1

Ich änderte das Tag zu "sql". Bitte geben Sie an, ob Sie MySQL oder SQLite verwenden und fügen Sie dann das entsprechende Tag hinzu. Warum willst du nicht 'limit' und' offset' verwenden? –

+0

wollen wissen, ob es möglich ist oder nicht ohne –

Antwort

2

Um den zweithöchsten Wert erhalten Sie max auf einen Satz anwenden können, die den Maximalwert ausschließt:

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

Mit Ihren Beispieldaten dies würde zurückkehren atk = 75.

Aber warum nicht die Verwendung Funktionen wie Limit und Offset, wenn sie verfügbar sind?

+0

Warum 'nicht in'? '<>' wird auch funktionieren. –

+0

@PaulSpiegel Guter Punkt, Ihr Vorschlag macht die Abfrage klarer. – jpw

+0

@jwp, mit Limit und Offset ist nicht so einfach wie 'limit 1 offset 1', wenn der max-Wert mehrmals auftritt. –

Verwandte Themen