The MySQL MIN()
function adalah fungsi agregat yang mengembalikan nilai minimum dari sebuah ekspresi.
Biasanya, ekspresi akan berupa rentang nilai yang dikembalikan sebagai baris terpisah dalam kolom, dan Anda dapat menggunakan fungsi ini untuk menemukan nilai minimum dari baris yang dikembalikan. Jika tidak ada baris yang cocok, MIN()
mengembalikan NULL
.
Misalnya, Anda dapat menggunakan fungsi ini untuk mengetahui kota mana yang memiliki populasi terkecil dari daftar kota.
Sintaks
Sintaks MIN()
seperti ini:
MIN([DISTINCT] expr) [over_clause]
Dimana expr
adalah ekspresi yang Anda inginkan nilai minimumnya.
over_clause
adalah klausa opsional yang bekerja dengan fungsi jendela. Perhatikan bahwa over_clause
hanya dapat digunakan jika Anda tidak menggunakan DISTINCT
kata kunci.
(opsional) DISTINCT
kata kunci dapat digunakan untuk menghilangkan nilai duplikat.
Contoh Dasar
Pertama, inilah data mentah yang akan kita gunakan dalam contoh ini:
USE world; SELECT Name, Population FROM City WHERE CountryCode = 'THA';
Hasil:
+-------------------+------------+ | Name | Population | +-------------------+------------+ | Bangkok | 6320174 | | Nonthaburi | 292100 | | Nakhon Ratchasima | 181400 | | Chiang Mai | 171100 | | Udon Thani | 158100 | | Hat Yai | 148632 | | Khon Kaen | 126500 | | Pak Kret | 126055 | | Nakhon Sawan | 123800 | | Ubon Ratchathani | 116300 | | Songkhla | 94900 | | Nakhon Pathom | 94100 | +-------------------+------------+
Kita dapat menggunakan MIN()
berfungsi untuk mencari kota dengan jumlah penduduk terkecil (yaitu baris dengan nilai terkecil pada kolom penduduknya).
USE world; SELECT MIN(Population) AS 'Minimum Value' FROM City WHERE CountryCode = 'THA';
Hasil:
+---------------+ | Minimum Value | +---------------+ | 94100 | +---------------+
GROUP BY Clause
Kita dapat menggunakan GROUP BY
klausul untuk mencantumkan setiap distrik, bersama dengan populasi kota terkecil di distrik itu (berdasarkan populasi):
USE world; SELECT District, MIN(Population) AS 'Minimum Value' FROM City WHERE CountryCode = 'AUS' GROUP BY District;
Hasil:
+-----------------+---------------+ | District | Minimum Value | +-----------------+---------------+ | New South Wales | 219761 | | Victoria | 125382 | | Queensland | 92273 | | West Australia | 1096829 | | South Australia | 978100 | | Capital Region | 322723 | | Tasmania | 126118 | +-----------------+---------------+
Klausul ORDER BY
Kami juga dapat menggunakan ORDER BY
klausa untuk menentukan kolom yang akan dipesan dengan:
USE world; SELECT District, MIN(Population) AS 'Minimum Value' FROM City WHERE CountryCode = 'AUS' GROUP BY District ORDER BY `Minimum Value` ASC;
Hasil:
+-----------------+---------------+ | District | Minimum Value | +-----------------+---------------+ | Queensland | 92273 | | Victoria | 125382 | | Tasmania | 126118 | | New South Wales | 219761 | | Capital Region | 322723 | | South Australia | 978100 | | West Australia | 1096829 | +-----------------+---------------+
Ini mengurutkan hasil dalam urutan menaik, yang mencantumkan nilai minimum terlebih dahulu.
Perhatikan bahwa, saat memesan dengan alias multi-kata (seperti `Minimum Value`
), Anda harus menggunakan karakter backtick (`
) sebagai ganti apostrof ('
) untuk mengelilingi dua kata.
Temukan Panjang Karakter Minimum
MIN()
fungsinya tidak terbatas hanya pada kolom dengan data numerik. Anda juga dapat menggabungkan MIN()
dengan fungsi lain untuk mengembalikan nilai minimum di area lain.
Misalnya, dengan menggunakan data sampel kami, kami dapat menemukan nilai dengan jumlah karakter minimum di City
kolom:
SELECT MIN(CHAR_LENGTH(Name)) AS 'Minimum Character Length' FROM city;
Hasil:
+--------------------------+ | Minimum Character Length | +--------------------------+ | 3 | +--------------------------+
Kita juga dapat melihat ini dengan menggunakan kueri berikut (yang tidak melibatkan MIN()
fungsi):
SELECT Name, CHAR_LENGTH(Name) AS 'Character Length' FROM city ORDER BY `Character Length` LIMIT 10;
Hasil:
+------+------------------+ | Name | Character Length | +------+------------------+ | Ome | 3 | | Yao | 3 | | Qom | 3 | | Itu | 3 | | Tsu | 3 | | Ube | 3 | | Ise | 3 | | Uji | 3 | | Ede | 3 | | Ota | 3 | +------+------------------+
Melihat beberapa kota memiliki panjang karakter yang sama, kita dapat menyesuaikan kueri ini untuk mengembalikan hanya nilai yang berbeda:
SELECT DISTINCT CHAR_LENGTH(Name) AS 'Character Length' FROM city ORDER BY `Character Length` LIMIT 10;
Hasil:
+------------------+ | Character Length | +------------------+ | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | +------------------+
Menggunakan Klausa OVER
Seperti disebutkan, sintaks memungkinkan untuk OVER
klausa untuk disertakan dalam kueri Anda. Pada dasarnya, OVER
klausa memungkinkan Anda untuk menentukan cara mempartisi baris kueri ke dalam grup untuk diproses oleh fungsi jendela.
Ini contohnya:
SELECT District, Name AS City, Population AS 'City Population', MIN(Population) OVER(PARTITION BY District) AS 'District Minimum' FROM City WHERE CountryCode = 'AUS' ORDER BY `District Minimum` DESC;
Hasil:
+-----------------+---------------+-----------------+------------------+ | District | City | City Population | District Minimum | +-----------------+---------------+-----------------+------------------+ | West Australia | Perth | 1096829 | 1096829 | | South Australia | Adelaide | 978100 | 978100 | | Capital Region | Canberra | 322723 | 322723 | | New South Wales | Sydney | 3276207 | 219761 | | New South Wales | Wollongong | 219761 | 219761 | | New South Wales | Newcastle | 270324 | 219761 | | New South Wales | Central Coast | 227657 | 219761 | | Tasmania | Hobart | 126118 | 126118 | | Victoria | Melbourne | 2865329 | 125382 | | Victoria | Geelong | 125382 | 125382 | | Queensland | Townsville | 109914 | 92273 | | Queensland | Brisbane | 1291117 | 92273 | | Queensland | Cairns | 92273 | 92273 | | Queensland | Gold Coast | 311932 | 92273 | +-----------------+---------------+-----------------+------------------+
Contoh ini mempartisi baris dengan District
, memberikan nilai minimum untuk setiap partisi (distrik). Ini memungkinkan Anda melihat data yang lebih terperinci, seperti populasi setiap kota, bersama dengan populasi kota terkecil (menurut populasi) di distrik yang sama.