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.