Hier sind drei Beispiele für die Verwendung von SQL zum Suchen und Auswählen der Zeile mit dem Mindestwert in einer bestimmten Spalte.
Die Beispiele funktionieren in den meisten wichtigen RDBMSs, einschließlich MySQL, MariaDB, PostgreSQL, SQLite, Oracle und SQL Server.
Beispieldaten
Beginnen wir mit den folgenden Daten:
SELECT * FROM PetShow;
Ergebnis:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 1 | Wag | 85 | | 2 | Scratch | 3 | | 3 | Tweet | 65 | | 4 | Bark | 8 | | 5 | Ruff | 15 | | 6 | Woof | 20 | +---------+-----------+---------+
Option 1
Hier ist unsere erste Option, um die Zeile mit dem Mindestwert aus der obigen Tabelle auszuwählen:
SELECT
PetId,
PetName,
Score
FROM PetShow
WHERE Score = ( SELECT MIN(Score) FROM PetShow );
Ergebnis:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 2 | Scratch | 3 | +---------+-----------+---------+
Hier haben wir den MIN()
verwendet Funktion innerhalb einer Unterabfrage, um den Mindestwert zu finden, und die gesamte Zeile mit der äußeren Abfrage zurückgegeben.
Wenn es mehrere Zeilen mit dem Min-Wert gibt
Wenn bei dieser Methode mehrere Zeilen mit dem Mindestwert vorhanden sind, werden alle zurückgegeben.
Angenommen, wir fügen eine weitere Zeile mit derselben Punktzahl wie die vorhandene Mindestpunktzahl in unsere Tabelle ein:
INSERT INTO PetShow VALUES (7, 'Punch', 3);
SELECT * FROM PetShow;
Unsere Tabelle sieht jetzt so aus:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 1 | Wag | 85 | | 2 | Scratch | 3 | | 3 | Tweet | 65 | | 4 | Bark | 8 | | 5 | Ruff | 15 | | 6 | Woof | 20 | | 7 | Punch | 3 | +---------+-----------+---------+
Wir können sehen, dass sowohl Scratch als auch Punch die niedrige Punktzahl von 3 haben.
Lassen Sie uns die vorherige Abfrage erneut ausführen, um den Mindestwert aus dieser Spalte zurückzugeben:
SELECT
PetId,
PetName,
Score
FROM PetShow
WHERE Score = ( SELECT MIN(Score) FROM PetShow );
Ergebnis:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 2 | Scratch | 3 | | 7 | Punch | 3 | +---------+-----------+---------+
Beide Zeilen mit den Mindestwerten werden zurückgegeben.
Wir können die Ergebnismenge bei Bedarf auf nur eine Zeile beschränken. Der genaue Code hängt vom verwendeten RDBMS ab.
Das LIMIT
-Klausel kann mit RDBSs wie PostgreSQL, MariaDB, MySQL und SQLite verwendet werden:
SELECT
PetId,
PetName,
Score
FROM PetShow
WHERE Score = ( SELECT MIN(Score) FROM PetShow )
ORDER BY PetId ASC
LIMIT 1;
Ergebnis:
+-------+---------+-------+ | PetId | PetName | Score | +-------+---------+-------+ | 2 | Scratch | 3 | +-------+---------+-------+
In SQL Server können wir den TOP
verwenden Klausel:
SELECT TOP 1
PetId,
PetName,
Score
FROM PetShow
WHERE Score = ( SELECT MIN(Score) FROM PetShow )
ORDER BY PetId ASC;
Ergebnis:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 2 | Scratch | 3 | +---------+-----------+---------+
Und in Oracle Database können wir das tun:
SELECT
PetId,
PetName,
Score
FROM PetShow
WHERE Score = ( SELECT MIN(Score) FROM PetShow )
ORDER BY PetId ASC
FETCH FIRST 1 ROW ONLY;
Ergebnis:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 2 | Scratch | 3 | +---------+-----------+---------+
Option 2
Wenn wir wollen, dass nur eine Zeile zurückgegeben wird, können wir tatsächlich auf den größten Teil des anderen Codes verzichten und nur die erste Zeile aus den geordneten Ergebnissen erhalten:
SELECT
PetId,
PetName,
Score
FROM PetShow
ORDER BY Score ASC
LIMIT 1;
Ergebnis:
+-------+---------+-------+ | PetId | PetName | Score | +-------+---------+-------+ | 7 | Punch | 3 | +-------+---------+-------+
Im SQL-Server:
SELECT TOP 1
PetId,
PetName,
Score
FROM PetShow
ORDER BY Score ASC;
Ergebnis:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 2 | Scratch | 3 | +---------+-----------+---------+
Und in der Oracle-Datenbank:
SELECT
PetId,
PetName,
Score
FROM PetShow
ORDER BY Score ASC
FETCH FIRST 1 ROW ONLY;
Ergebnis:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 2 | Scratch | 3 | +---------+-----------+---------+
Option 3
Eine andere Möglichkeit, die Zeile mit dem Mindestwert auszuwählen, besteht darin, die Tabelle wie folgt mit sich selbst zu verknüpfen:
SELECT
p1.PetId,
p1.PetName,
p1.Score
FROM PetShow p1
LEFT JOIN PetShow p2 ON p1.Score < p2.Score
WHERE p2.PetId IS NULL;
Ergebnis:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 1 | Wag | 85 | | 8 | Purr | 85 | +---------+-----------+---------+
Wie im vorherigen Beispiel können wir die Ergebnisse bei Bedarf auf eine Zeile (oder eine andere Zahl) beschränken.