Her er tre eksempler på brug af SQL til at finde og vælge rækken med minimumsværdien i en given kolonne.
Eksemplerne fungerer i de fleste større RDBMS'er, inklusive MySQL, MariaDB, PostgreSQL, SQLite, Oracle og SQL Server.
Eksempeldata
Lad os starte med følgende data:
SELECT * FROM PetShow;
Resultat:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 1 | Wag | 85 | | 2 | Scratch | 3 | | 3 | Tweet | 65 | | 4 | Bark | 8 | | 5 | Ruff | 15 | | 6 | Woof | 20 | +---------+-----------+---------+
Valgmulighed 1
Her er vores første mulighed for at vælge rækken med minimumsværdien fra ovenstående tabel:
SELECT
PetId,
PetName,
Score
FROM PetShow
WHERE Score = ( SELECT MIN(Score) FROM PetShow );
Resultat:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 2 | Scratch | 3 | +---------+-----------+---------+
Her brugte vi MIN()
funktion i en underforespørgsel for at finde minimumsværdien og returnerede hele rækken med den ydre forespørgsel.
Når der er flere rækker med minimumsværdien
Ved at bruge denne metode, returneres alle rækker, hvis der er flere rækker med minimumsværdien.
Antag, at vi indsætter en anden række i vores tabel med samme score som den eksisterende minimumscore:
INSERT INTO PetShow VALUES (7, 'Punch', 3);
SELECT * FROM PetShow;
Vores tabel ser nu sådan ud:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 1 | Wag | 85 | | 2 | Scratch | 3 | | 3 | Tweet | 65 | | 4 | Bark | 8 | | 5 | Ruff | 15 | | 6 | Woof | 20 | | 7 | Punch | 3 | +---------+-----------+---------+
Vi kan se, at både Scratch og Punch har fået den lave score på 3.
Lad os køre den forrige forespørgsel igen for at returnere minimumværdien fra den kolonne:
SELECT
PetId,
PetName,
Score
FROM PetShow
WHERE Score = ( SELECT MIN(Score) FROM PetShow );
Resultat:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 2 | Scratch | 3 | | 7 | Punch | 3 | +---------+-----------+---------+
Begge rækker med minimumsværdierne returneres.
Vi kan begrænse resultatsættet til kun én række, hvis det kræves. Den nøjagtige kode vil afhænge af det RDBMS, der bruges.
LIMIT
klausul kan bruges med RDBS'er såsom PostgreSQL, MariaDB, MySQL og SQLite:
SELECT
PetId,
PetName,
Score
FROM PetShow
WHERE Score = ( SELECT MIN(Score) FROM PetShow )
ORDER BY PetId ASC
LIMIT 1;
Resultat:
+-------+---------+-------+ | PetId | PetName | Score | +-------+---------+-------+ | 2 | Scratch | 3 | +-------+---------+-------+
I SQL Server kan vi bruge TOP
klausul:
SELECT TOP 1
PetId,
PetName,
Score
FROM PetShow
WHERE Score = ( SELECT MIN(Score) FROM PetShow )
ORDER BY PetId ASC;
Resultat:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 2 | Scratch | 3 | +---------+-----------+---------+
Og i Oracle Database kan vi gøre dette:
SELECT
PetId,
PetName,
Score
FROM PetShow
WHERE Score = ( SELECT MIN(Score) FROM PetShow )
ORDER BY PetId ASC
FETCH FIRST 1 ROW ONLY;
Resultat:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 2 | Scratch | 3 | +---------+-----------+---------+
Valgmulighed 2
Hvis vi kun vil have én række returneret, kan vi faktisk fjerne det meste af den anden kode og bare få den første række ud af de bestilte resultater:
SELECT
PetId,
PetName,
Score
FROM PetShow
ORDER BY Score ASC
LIMIT 1;
Resultat:
+-------+---------+-------+ | PetId | PetName | Score | +-------+---------+-------+ | 7 | Punch | 3 | +-------+---------+-------+
I SQL Server:
SELECT TOP 1
PetId,
PetName,
Score
FROM PetShow
ORDER BY Score ASC;
Resultat:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 2 | Scratch | 3 | +---------+-----------+---------+
Og i Oracle Database:
SELECT
PetId,
PetName,
Score
FROM PetShow
ORDER BY Score ASC
FETCH FIRST 1 ROW ONLY;
Resultat:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 2 | Scratch | 3 | +---------+-----------+---------+
Valgmulighed 3
En anden måde at vælge rækken med minimumsværdien på er at slutte sig til tabellen på sig selv, sådan her:
SELECT
p1.PetId,
p1.PetName,
p1.Score
FROM PetShow p1
LEFT JOIN PetShow p2 ON p1.Score < p2.Score
WHERE p2.PetId IS NULL;
Resultat:
+---------+-----------+---------+ | PetId | PetName | Score | |---------+-----------+---------| | 1 | Wag | 85 | | 8 | Purr | 85 | +---------+-----------+---------+
Som med det tidligere eksempel kan vi begrænse resultaterne til én række (eller et andet tal), hvis det kræves.