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.