MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

3 sposoby na wybranie wiersza z minimalną wartością w SQL

Oto trzy przykłady użycia SQL do znalezienia i wybrania wiersza z minimalną wartością w danej kolumnie.

Przykłady działają w większości głównych RDBMS, w tym MySQL, MariaDB, PostgreSQL, SQLite, Oracle i SQL Server.

Przykładowe dane

Zacznijmy od następujących danych:

SELECT * FROM PetShow;

Wynik:

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

Opcja 1

Oto nasza pierwsza opcja wyboru wiersza z minimalną wartością z powyższej tabeli:

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

Wynik:

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

Tutaj użyliśmy MIN() funkcji w podzapytaniu, aby znaleźć minimalną wartość, i zwróciła cały wiersz z zapytaniem zewnętrznym.

Gdy istnieje wiele wierszy z minimalną wartością

Używając tej metody, jeśli istnieje wiele wierszy z minimalną wartością, wszystkie zostaną zwrócone.

Załóżmy, że wstawiamy do naszej tabeli kolejny wiersz z takim samym wynikiem, jak istniejący wynik minimalny:

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

Nasz stół wygląda teraz tak:

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

Widzimy, że zarówno Scratch, jak i Punch mają niski wynik 3.

Uruchommy ponownie poprzednie zapytanie, aby zwrócić minimalną wartość z tej kolumny:

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

Wynik:

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

Zwracane są oba wiersze z wartościami minimalnymi.

W razie potrzeby możemy ograniczyć zestaw wyników tylko do jednego wiersza. Dokładny kod będzie zależał od używanego RDBMS.

LIMIT Klauzula może być używana z bazami danych RDBS, takimi jak PostgreSQL, MariaDB, MySQL i SQLite:

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

Wynik:

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

W SQL Server możemy użyć TOP klauzula:

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

Wynik:

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

A w Oracle Database możemy to zrobić:

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

Wynik:

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

Opcja 2

Jeśli chcemy, aby zwrócono tylko jeden wiersz, możemy faktycznie pozbyć się większości pozostałego kodu i po prostu uzyskać pierwszy wiersz z uporządkowanych wyników:

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

Wynik:

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

W SQL Server:

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

Wynik:

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

A w bazie danych Oracle:

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

Wynik:

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

Opcja 3

Innym sposobem wybrania wiersza z minimalną wartością jest samo dołączenie do tabeli, w ten sposób:

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

Wynik:

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

Podobnie jak w poprzednim przykładzie, w razie potrzeby możemy ograniczyć wyniki do jednego wiersza (lub innej liczby).


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb stronicowania w oparciu o zakres

  2. Funkcja Mongo Find() nie wyklucza _id

  3. Tworzenie niestandardowego identyfikatora obiektu w MongoDB

  4. Jak filtrować tablicę w poddokumencie za pomocą MongoDB?

  5. Pobierz BinData UUID z Mongo jako ciąg