sql >> Database teknologi >  >> NoSQL >> MongoDB

3 måder at vælge rækken med minimumsværdien i SQL

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.


  1. Sådan får du Skema af mongoose-database, som er defineret i en anden model

  2. MongoDB $split

  3. Selleri skaber en ny forbindelse til hver opgave

  4. MongoDB $binarySize