MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

3 начина да изберете реда с минимална стойност в SQL

Ето три примера за използване на SQL за намиране и избиране на реда с минималната стойност в дадена колона.

Примерите работят в повечето основни RDBMS, включително MySQL, MariaDB, PostgreSQL, SQLite, Oracle и SQL Server.

Примерни данни

Нека започнем със следните данни:

SELECT * FROM PetShow;

Резултат:

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

Опция 1

Ето първата ни опция за избор на ред с минимална стойност от горната таблица:

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

Резултат:

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

Тук използвахме MIN() функция в рамките на подзаявка, за да намери минималната стойност, и върна целия ред с външната заявка.

Когато има няколко реда с минимална стойност

Използвайки този метод, ако има няколко реда с минимална стойност, всички те се връщат.

Да предположим, че вмъкваме друг ред в нашата таблица със същия резултат като съществуващия минимален резултат:

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

Нашата таблица сега изглежда така:

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

Виждаме, че и Scratch, и Punch са получили ниската оценка от 3.

Нека изпълним предишната заявка отново, за да върнем минималната стойност от тази колона:

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

Резултат:

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

И двата реда с минималните стойности се връщат.

Можем да ограничим набора от резултати само до един ред, ако е необходимо. Точният код ще зависи от използваната RDBMS.

LIMIT Клаузата може да се използва с RDBS, като PostgreSQL, MariaDB, MySQL и SQLite:

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

Резултат:

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

В SQL Server можем да използваме TOP клауза:

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

Резултат:

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

И в Oracle Database можем да направим това:

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

Резултат:

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

Опция 2

Ако искаме да се върне само един ред, всъщност можем да премахнем повечето от другия код и просто да извадим първия ред от подредените резултати:

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

Резултат:

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

В SQL Server:

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

Резултат:

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

И в Oracle Database:

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

Резултат:

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

Опция 3

Друг начин да изберете реда с минимална стойност е да се присъедините към самата таблица, както следва:

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

Резултат:

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

Както в предишния пример, можем да ограничим резултатите до един ред (или друго число), ако е необходимо.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Премахване на дубликат в MongoDB

  2. Актуализация за промяна на лиценза на MongoDB SSPL

  3. Абониране за Meteor.Users Collection

  4. Как да се свържете с вашите MongoDB внедрявания, използвайки Robo 3T GUI

  5. MongoDB получи поддокумент