MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

3 Cara Memilih Baris dengan Nilai Minimum di SQL

Berikut adalah tiga contoh penggunaan SQL untuk menemukan dan memilih baris dengan nilai minimum dalam kolom tertentu.

Contoh bekerja di sebagian besar RDBMS utama, termasuk MySQL, MariaDB, PostgreSQL, SQLite, Oracle, dan SQL Server.

Contoh Data

Mari kita mulai dengan data berikut:

SELECT * FROM PetShow;

Hasil:

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

Opsi 1

Inilah opsi pertama kami untuk memilih baris dengan nilai minimum dari tabel di atas:

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

Hasil:

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

Di sini, kami menggunakan MIN() berfungsi di dalam subkueri untuk menemukan nilai minimum, dan mengembalikan seluruh baris dengan kueri luar.

Bila ada Beberapa Baris dengan Nilai Min

Dengan menggunakan metode ini, jika ada beberapa baris dengan nilai minimum, semuanya dikembalikan.

Misalkan kita memasukkan baris lain ke dalam tabel kita dengan skor yang sama dengan skor minimum yang ada:

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

Tabel kita sekarang terlihat seperti ini:

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

Kita dapat melihat bahwa Scratch dan Punch memiliki skor yang rendah yaitu 3.

Mari kita jalankan kueri sebelumnya lagi untuk mengembalikan nilai minimum dari kolom itu:

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

Hasil:

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

Kedua baris dengan nilai minimum dikembalikan.

Kami dapat membatasi hasil yang disetel hanya satu baris jika diperlukan. Kode yang tepat akan tergantung pada RDBMS yang digunakan.

LIMIT klausa dapat digunakan dengan RDBS seperti PostgreSQL, MariaDB, MySQL, dan SQLite:

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

Hasil:

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

Di SQL Server, kita dapat menggunakan TOP klausa:

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

Hasil:

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

Dan di Oracle Database, kita bisa melakukan ini:

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

Hasil:

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

Opsi 2

Jika kita hanya ingin satu baris dikembalikan, kita sebenarnya dapat menghapus sebagian besar kode lainnya dan hanya mendapatkan baris pertama dari hasil yang dipesan:

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

Hasil:

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

Di SQL Server:

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

Hasil:

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

Dan di Oracle Database:

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

Hasil:

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

Opsi 3

Cara lain untuk memilih baris dengan nilai minimum adalah dengan menggabungkan tabel itu sendiri, seperti ini:

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

Hasil:

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

Seperti contoh sebelumnya, kita dapat membatasi hasil ke satu baris (atau nomor lain) jika diperlukan.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $gt Aggregation Pipeline Operator

  2. Pipa agregasi Mongodb cara membatasi push grup

  3. MongoDB memperbarui bidang dalam array bersarang

  4. Kueri luwak di mana nilainya bukan nol

  5. Mongo massal menemukan dan memperbarui bidang dokumen yang cocok dalam satu permintaan?