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

3 Cara Memilih Baris dengan Nilai Maksimum di SQL

Berikut adalah tiga contoh yang menggunakan SQL untuk menemukan dan memilih baris dengan nilai maksimum dalam kolom tertentu.

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

Contoh Data

Kita akan 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      |
| 7       | Punch     | 3       |
+---------+-----------+---------+

Opsi 1

Berikut adalah contoh pemilihan baris dengan nilai maksimum dari Score kolom pada tabel di atas:

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

Hasil:

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

Kami menggunakan MAX() fungsi dalam subkueri untuk menemukan nilai maksimum, dan mengembalikan seluruh baris dengan kueri luar.

Bila ada Beberapa Baris dengan Nilai Maks

Dengan menggunakan metode ini, jika ada lebih dari satu baris dengan nilai maksimal, semuanya dikembalikan.

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

INSERT INTO PetShow VALUES (8, 'Purr', 85);
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       |
| 8       | Purr      | 85      |
+---------+-----------+---------+

Kita dapat melihat bahwa Wag dan Purr memiliki skor tertinggi 85.

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

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

Hasil:

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

Kedua baris dengan nilai maksimal dikembalikan seperti yang diharapkan.

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 MAX(Score) FROM PetShow )
ORDER BY PetId ASC
LIMIT 1;

Hasil:

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

Di SQL Server, kita dapat menggunakan TOP klausa:

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

Hasil:

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

Dan di Oracle Database:

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

Hasil:

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

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 DESC
LIMIT 1;

Hasil:

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

Di SQL Server:

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

Hasil:

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

Dan di Oracle Database:

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

Hasil:

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

Opsi 3

Cara lain untuk memilih baris dengan nilai maksimum 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. Periksa apakah setiap elemen dalam array cocok dengan kondisi

  2. Cara Mengganti Dokumen yang Ada Saat Mengimpor File ke MongoDB

  3. Perbandingan agregasi MongoDB:group(), $group dan MapReduce

  4. MongoDB $maks

  5. Menanyakan setelah diisi di Mongoose