Dalam SQL, MIN()
function adalah fungsi agregat yang mengembalikan nilai minimum dalam ekspresi yang diberikan.
Berikut adalah beberapa contoh dasar untuk mendemonstrasikan cara kerjanya.
Tabel Contoh
Misalkan kita memiliki tabel berikut:
SELECT * FROM Products;
Hasil:
+-------------+------------+---------------------------------+----------------+-----------------------------------------+ | ProductId | VendorId | ProductName | ProductPrice | ProductDescription | |-------------+------------+---------------------------------+----------------+-----------------------------------------| | 1 | 1001 | Left handed screwdriver | 25.99 | Purple. Includes left handed carry box. | | 2 | 1001 | Long Weight (blue) | 14.75 | Includes a long wait. | | 3 | 1001 | Long Weight (green) | 11.99 | Approximate 30 minute waiting period. | | 4 | 1002 | Sledge Hammer | 33.49 | Wooden handle. Free wine glasses. | | 5 | 1003 | Chainsaw | 245.00 | Orange. Includes spare fingers. | | 6 | 1003 | Straw Dog Box | NULL | Tied with vines. Very chewable. | | 7 | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | Brown ceramic with solid handle. | +-------------+------------+---------------------------------+----------------+-----------------------------------------+
Contoh
Berikut adalah contoh sederhana untuk didemonstrasikan.
SELECT MIN(ProductPrice)
FROM Products;
Hasil:
+--------------------+ | (No column name) | |--------------------| | 9.99 | +--------------------+
Dalam hal ini, informasi harga disimpan di ProductPrice
kolom, jadi kami meneruskannya sebagai argumen ke MIN()
fungsi, yang kemudian menghitung dan mengembalikan hasilnya.
Menggunakan Alias Kolom
Anda akan melihat bahwa hasil sebelumnya tidak menyertakan nama kolom. Ini sudah diduga, karena MIN()
fungsi tidak mengembalikan kolom apa pun. Anda dapat dengan mudah memberikan nama kolom dengan menetapkan alias.
SELECT MIN(ProductPrice) AS MinimumPrice
FROM Products;
Hasil:
+----------------+ | MinimumPrice | |----------------| | 9.99 | +----------------+
Hasil yang Difilter
MIN()
fungsi beroperasi pada baris yang dikembalikan oleh kueri. Jadi jika Anda memfilter hasilnya, hasil dari MIN()
akan mencerminkan hal itu.
SELECT MIN(ProductPrice) AS MinimumPrice
FROM Products
WHERE VendorId = 1001;
Hasil:
+----------------+ | MinimumPrice | |----------------| | 11.99 | +----------------+
Dalam hal ini, 11,99 adalah harga minimum dari semua produk yang ditawarkan oleh vendor tertentu.
NULL
Nilai
MIN()
fungsi mengabaikan NULL
nilai-nilai. Dalam tabel contoh kami di atas, nomor produk 6
telah mendapat NULL
dalam ProductPrice
kolom, tapi itu diabaikan di MIN()
. kami contoh.
Bergantung pada DBMS dan pengaturan Anda, Anda mungkin atau mungkin tidak melihat peringatan bahwa NULL
nilai dieliminasi dalam kumpulan hasil.
Berikut ini contoh yang mungkin Anda lihat:
SELECT MIN(ProductPrice) AS MinimumPrice
FROM Products;
Hasil:
+----------------+ | MinimumPrice | |----------------| | 9.99 | +----------------+ Warning: Null value is eliminated by an aggregate or other SET operation.
Semua ini memberitahu kita bahwa kolom berisi setidaknya satu NULL
nilai, dan diabaikan saat menghitung hasil.
Data Tanggal/Waktu
Anda dapat menggunakan MIN()
pada nilai tanggal/waktu.
Misalkan kita memiliki tabel berikut:
SELECT PetName, DOB
FROM Pets;
Hasil:
+-----------+------------+ | PetName | DOB | |-----------+------------| | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | NULL | | Meow | NULL | +-----------+------------+
Kita dapat menggunakan MIN()
untuk menemukan tanggal lahir minimum (DOB
).
SELECT MIN(DOB) AS MinDOB
FROM Pets;
Hasil:
+------------+ | MinDOB | |------------| | 2018-10-01 | +------------+
Sekali lagi, itu mengabaikan NULL
nilai.
Data Karakter
Saat digunakan dengan kolom data karakter, MIN()
menemukan nilai yang terendah dalam urutan pengurutan.
Contoh:
SELECT MIN(ProductName) AS MinimumProductName
FROM Products;
Hasil:
+---------------------------------+ | MinimumProductName | |---------------------------------| | Bottomless Coffee Mugs (4 Pack) | +---------------------------------+
Yang DISTINCT
Kata kunci
DBMS Anda dapat mengizinkan DISTINCT
kata kunci yang akan digunakan dengan MIN()
fungsi. Jika demikian, ini mungkin untuk memenuhi standar ISO SQL.
Oleh karena itu, Anda mungkin dapat melakukan ini:
SELECT MIN(DISTINCT ProductPrice) AS MinimumPrice
FROM Products;
Hasil:
+----------------+ | MinimumPrice | |----------------| | 9.99 | +----------------+
Tapi itu tidak akan berdampak pada hasil.
DISTINCT
kata kunci bisa sangat berguna bila digunakan dengan konteks lain (mis. dengan COUNT()
function), tetapi tidak ada artinya jika digunakan dengan MIN()
. DISTINCT
kata kunci menghapus duplikat, tetapi dalam kasus MIN()
tidak akan ada bedanya karena MIN()
mengembalikan hasil yang sama terlepas dari berapa banyak baris yang berbagi nilai minimum yang sama.
Fungsi Jendela
Bergantung pada DBMS Anda, Anda mungkin dapat menggunakan OVER
klausa dengan MIN()
. Anda fungsi untuk membuat fungsi jendela.
Fungsi jendela melakukan operasi seperti agregat pada sekumpulan baris kueri. Ini menghasilkan hasil untuk setiap baris kueri. Ini berbeda dengan operasi agregat, yang mengelompokkan baris kueri ke dalam satu baris hasil.
Berikut adalah contoh untuk mendemonstrasikan konsep tersebut.
Kami telah melihat Products
meja. Basis data kami juga memiliki Customers
tabel, dan berisi data berikut:
+--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+ | CustomerId | CustomerName | PostalAddress | City | StateProvince | ZipCode | Country | Phone | |--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+ | 1001 | Palm Pantry | 20 Esplanade | Townsville | QLD | 2040 | AUS | (308) 555-0100 | | 1002 | Tall Poppy | 12 Main Road | Columbus | OH | 43333 | USA | (310) 657-0134 | | 1003 | Crazy Critters | 10 Infinite Loops | Cairns | QLD | 4870 | AUS | (418) 555-0143 | | 1004 | Oops Media | 4 Beachside Drive | Perth | WA | 1234 | AUS | (405) 443-5987 | | 1005 | Strange Names Inc. | 789 George Street | Sydney | NSW | 2000 | AUD | (318) 777-0177 | | 1006 | Hi-Five Solutionists | 5 High Street | Highlands | HI | 1254 | AUS | (415) 413-5182 | +--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+
Kami dapat mengambil data dari tabel ini dan menyajikannya sebagai satu set hasil dengan menggunakan gabungan.
Kita juga dapat menggunakan MIN()
fungsi dengan OVER
klausa untuk menerapkan fungsi jendela ke data.
SELECT
v.VendorName,
p.ProductName,
p.ProductPrice,
MIN(ProductPrice) OVER (PARTITION BY v.VendorName) AS "Minimum Price For This Vendor"
FROM Products p
INNER JOIN Vendors v
ON v.VendorId = p.VendorId
ORDER BY VendorName, ProductPrice, "Minimum Price For This Vendor";
Hasil:
+---------------+---------------------------------+----------------+---------------------------------+ | VendorName | ProductName | ProductPrice | Minimum Price For This Vendor | |---------------+---------------------------------+----------------+---------------------------------| | Katty Kittens | Bottomless Coffee Mugs (4 Pack) | 9.99 | 9.99 | | Mars Supplies | Long Weight (green) | 11.99 | 11.99 | | Mars Supplies | Long Weight (blue) | 14.75 | 11.99 | | Mars Supplies | Left handed screwdriver | 25.99 | 11.99 | | Pedal Medals | Straw Dog Box | NULL | 245.00 | | Pedal Medals | Chainsaw | 245.00 | 245.00 | | Randy Roofers | Sledge Hammer | 33.49 | 33.49 | +---------------+---------------------------------+----------------+---------------------------------+
Dalam hal ini kami menggunakan OVER
klausa dengan MIN()
. kami berfungsi untuk mempartisi hasil berdasarkan nama vendor.
Dengan melakukan ini, kami dapat mengembalikan informasi harga untuk setiap produk, serta harga minimum untuk semua produk dari vendor tersebut. Harga minimum ini berubah seiring perubahan vendor (kecuali beberapa vendor memiliki harga minimum yang sama), tetapi tetap sama untuk semua produk dari vendor yang sama.
Konsep ini juga dapat diterapkan ke fungsi agregat lainnya dalam SQL, seperti SUM()
, AVG()
, MAX()
, dan COUNT()
.