sql >> Databáze >  >> NoSQL >> MongoDB

3 způsoby, jak vybrat řádek s minimální hodnotou v SQL

Zde jsou tři příklady použití SQL k nalezení a výběru řádku s minimální hodnotou v daném sloupci.

Příklady fungují ve většině hlavních RDBMS, včetně MySQL, MariaDB, PostgreSQL, SQLite, Oracle a SQL Server.

Ukázková data

Začněme s následujícími údaji:

SELECT * FROM PetShow;

Výsledek:

+---------+-----------+---------+
| PetId   | PetName   | Score   |
|---------+-----------+---------|
| 1       | Wag       | 85      |
| 2       | Scratch   | 3       |
| 3       | Tweet     | 65      |
| 4       | Bark      | 8       |
| 5       | Ruff      | 15      |
| 6       | Woof      | 20      |
+---------+-----------+---------+

Možnost 1

Zde je naše první možnost pro výběr řádku s minimální hodnotou z výše uvedené tabulky:

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

Výsledek:

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

Zde jsme použili MIN() funkce v rámci dílčího dotazu k nalezení minimální hodnoty a vrátila celý řádek s vnějším dotazem.

Když existuje více řádků s minimální hodnotou

Při použití této metody, pokud existuje více řádků s minimální hodnotou, jsou vráceny všechny.

Předpokládejme, že do tabulky vložíme další řádek se stejným skóre, jako je stávající minimální skóre:

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

Naše tabulka nyní vypadá takto:

+---------+-----------+---------+
| PetId   | PetName   | Score   |
|---------+-----------+---------|
| 1       | Wag       | 85      |
| 2       | Scratch   | 3       |
| 3       | Tweet     | 65      |
| 4       | Bark      | 8       |
| 5       | Ruff      | 15      |
| 6       | Woof      | 20      |
| 7       | Punch     | 3       |
+---------+-----------+---------+

Vidíme, že Scratch i Punch mají nízké skóre 3.

Spusťte znovu předchozí dotaz, abychom vrátili minimální hodnotu z tohoto sloupce:

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

Výsledek:

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

Jsou vráceny oba řádky s minimálními hodnotami.

V případě potřeby můžeme sadu výsledků omezit pouze na jeden řádek. Přesný kód bude záviset na používaném RDBMS.

LIMIT klauzuli lze použít s RDBS, jako je PostgreSQL, MariaDB, MySQL a SQLite:

SELECT 
    PetId,
    PetName,
    Score
FROM PetShow 
WHERE Score = ( SELECT MIN(Score) FROM PetShow )
ORDER BY PetId ASC
LIMIT 1;

Výsledek:

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

V SQL Serveru můžeme použít TOP klauzule:

SELECT TOP 1
    PetId,
    PetName,
    Score
FROM PetShow 
WHERE Score = ( SELECT MIN(Score) FROM PetShow )
ORDER BY PetId ASC;

Výsledek:

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

A v databázi Oracle můžeme udělat toto:

SELECT
    PetId,
    PetName,
    Score
FROM PetShow 
WHERE Score = ( SELECT MIN(Score) FROM PetShow )
ORDER BY PetId ASC
FETCH FIRST 1 ROW ONLY;

Výsledek:

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

Možnost 2

Pokud chceme vrátit pouze jeden řádek, můžeme se ve skutečnosti zbavit většiny ostatních kódů a získat pouze první řádek z uspořádaných výsledků:

SELECT 
    PetId,
    PetName,
    Score
FROM PetShow 
ORDER BY Score ASC
LIMIT 1;

Výsledek:

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

V SQL Server:

SELECT TOP 1
    PetId,
    PetName,
    Score
FROM PetShow 
ORDER BY Score ASC;

Výsledek:

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

A v databázi Oracle:

SELECT
    PetId,
    PetName,
    Score
FROM PetShow 
ORDER BY Score ASC
FETCH FIRST 1 ROW ONLY;

Výsledek:

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

Možnost 3

Dalším způsobem, jak vybrat řádek s minimální hodnotou, je připojit tabulku k sobě, takto:

SELECT 
    p1.PetId, 
    p1.PetName, 
    p1.Score
FROM PetShow p1
LEFT JOIN PetShow p2 ON p1.Score < p2.Score
WHERE p2.PetId IS NULL;

Výsledek:

+---------+-----------+---------+
| PetId   | PetName   | Score   |
|---------+-----------+---------|
| 1       | Wag       | 85      |
| 8       | Purr      | 85      |
+---------+-----------+---------+

Stejně jako v předchozím příkladu můžeme v případě potřeby omezit výsledky na jeden řádek (nebo jiné číslo).


  1. Příkaz Redis pro získání všech dostupných klíčů?

  2. Jak nainstalovat dřívější verzi mongodb s homebrew?

  3. Meteorická stránka se obnovuje kliknutím na tlačítko

  4. Mongo jedinečný index nerozlišuje velká a malá písmena