sql >> Databasteknik >  >> NoSQL >> MongoDB

3 sätt att välja raden med minimivärdet i SQL

Här är tre exempel på hur du använder SQL för att hitta och välja raden med minimivärdet i en given kolumn.

Exemplen fungerar i de flesta större RDBMS, inklusive MySQL, MariaDB, PostgreSQL, SQLite, Oracle och SQL Server.

Exempeldata

Låt oss börja med följande 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      |
+---------+-----------+---------+

Alternativ 1

Här är vårt första alternativ för att välja raden med det lägsta värdet från tabellen ovan:

SELECT 
    PetId,
    PetName,
    Score
FROM PetShow 
WHERE Score = ( SELECT MIN(Score) FROM PetShow );

Resultat:

+---------+-----------+---------+
| PetId   | PetName   | Score   |
|---------+-----------+---------|
| 2       | Scratch   | 3       |
+---------+-----------+---------+

Här använde vi MIN() funktion inom en underfråga för att hitta minimivärdet och returnerade hela raden med den yttre frågan.

När det finns flera rader med minsta värdet

Med den här metoden, om det finns flera rader med minimivärdet, returneras alla.

Anta att vi infogar en annan rad i vår tabell med samma poäng som den befintliga minimipoängen:

INSERT INTO PetShow VALUES (7, 'Punch', 3);
SELECT * FROM PetShow;

Vår tabell ser nu ut så här:

+---------+-----------+---------+
| 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 att både Scratch och Punch har fått den låga poängen 3.

Låt oss köra den föregående frågan igen för att returnera minimivärdet från den kolumnen:

SELECT 
    PetId,
    PetName,
    Score
FROM PetShow 
WHERE Score = ( SELECT MIN(Score) FROM PetShow );

Resultat:

+---------+-----------+---------+
| PetId   | PetName   | Score   |
|---------+-----------+---------|
| 2       | Scratch   | 3       |
| 7       | Punch     | 3       |
+---------+-----------+---------+

Båda raderna med minimivärdena returneras.

Vi kan begränsa resultatuppsättningen till bara en rad om det behövs. Den exakta koden beror på det RDBMS som används.

LIMIT klausul kan användas med RDBS som PostgreSQL, MariaDB, MySQL och 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 använda 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       |
+---------+-----------+---------+

Och i Oracle Database kan vi göra detta:

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       |
+---------+-----------+---------+

Alternativ 2

Om vi ​​bara vill ha en rad returnerad kan vi faktiskt avskaffa det mesta av den andra koden och bara få den första raden av de beställda resultaten:

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       |
+---------+-----------+---------+

Och 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       |
+---------+-----------+---------+

Alternativ 3

Ett annat sätt att välja raden med det lägsta värdet är att gå med i tabellen på sig själv, så här:

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 tidigare exemplet kan vi begränsa resultaten till en rad (eller något annat nummer) om det behövs.


  1. En översikt över MongoDB och lastbalansering

  2. skicka nedströmsmeddelande till google ccs med node js

  3. Hur man får klienten att ladda ner en mycket stor fil som genereras i farten

  4. glesa index och nollvärden i mongo