The MySQL MAX()
function adalah fungsi agregat yang mengembalikan nilai maksimum 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 maksimum dari baris yang dikembalikan. Jika tidak ada baris yang cocok, MAX()
mengembalikan NULL
.
Misalnya, Anda dapat menggunakan fungsi ini untuk mengetahui kota mana yang memiliki populasi terbesar dari daftar kota.
Sintaks
Sintaks MAX()
seperti ini:
MAX([DISTINCT] expr) [over_clause]
Dimana expr
adalah ekspresi yang Anda inginkan nilai maksimumnya.
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 MAX()
berfungsi untuk mencari kota dengan populasi terbesar (yaitu baris dengan nilai maksimum pada kolom populasinya).
USE world; SELECT MAX(Population) AS 'Maximum Value' FROM City WHERE CountryCode = 'THA';
Hasil:
+---------------+ | Maximum Value | +---------------+ | 6320174 | +---------------+
GROUP BY Clause
Kita dapat menggunakan GROUP BY
klausul untuk mencantumkan setiap negara, bersama dengan populasi kota terbesar di negara itu (berdasarkan populasi):
USE world; SELECT District, MAX(Population) AS 'Max Value' FROM City WHERE CountryCode = 'AUS' GROUP BY District;
Hasil:
+-----------------+-----------+ | District | Max Value | +-----------------+-----------+ | New South Wales | 3276207 | | Victoria | 2865329 | | Queensland | 1291117 | | 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, MAX(Population) AS 'Max Value' FROM City WHERE CountryCode = 'AUS' GROUP BY District ORDER BY `Max Value` ASC;
Hasil:
+-----------------+-----------+ | District | Max Value | +-----------------+-----------+ | Tasmania | 126118 | | Capital Region | 322723 | | South Australia | 978100 | | West Australia | 1096829 | | Queensland | 1291117 | | Victoria | 2865329 | | New South Wales | 3276207 | +-----------------+-----------+
Ini mengurutkan hasil dalam urutan menaik, yang mencantumkan nilai minimum terlebih dahulu.
Perhatikan bahwa, saat memesan dengan alias multi-kata (seperti `Max Value`
), Anda harus menggunakan karakter backtick (`
) sebagai ganti apostrof ('
) untuk mengelilingi dua kata.
Temukan Panjang Karakter Maksimum
MAX()
fungsinya tidak terbatas hanya pada kolom dengan data numerik. Anda juga dapat menggabungkan MAX()
dengan fungsi lain untuk mengembalikan nilai maksimum di area lain.
Misalnya, dengan menggunakan data sampel kami, kami dapat menemukan nilai dengan jumlah karakter maksimum di City
kolom:
SELECT MAX(CHAR_LENGTH(Name)) AS 'Maximum Character Length' FROM city;
Hasil:
+--------------------------+ | Maximum Character Length | +--------------------------+ | 34 | +--------------------------+
Kita juga dapat melihat ini dengan menggunakan kueri berikut (yang tidak melibatkan MAX()
fungsi):
SELECT Name, CHAR_LENGTH(Name) AS 'Character Length' FROM city ORDER BY `Character Length` DESC LIMIT 10;
Hasil:
+--------------------------------------+------------------+ | Name | Character Length | +--------------------------------------+------------------+ | Luxembourg [Luxemburg/Lëtzebuerg] | 34 | | Castellón de la Plana [Castell | 31 | | San Fernando del Valle de Cata | 30 | | Santo Domingo de los Colorados | 30 | | Thiruvananthapuram (Trivandrum | 30 | | [San Cristóbal de] la Laguna | 29 | | Ingraj Bazar (English Bazar) | 28 | | Soledad de Graciano Sánchez | 28 | | Valle de Chalco Solidaridad | 27 | | Machilipatnam (Masulipatam) | 27 | +--------------------------------------+------------------+
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', MAX(Population) OVER(PARTITION BY District) AS 'District Max' FROM City WHERE CountryCode = 'AUS' ORDER BY `District Max` DESC;
Hasil:
+-----------------+---------------+-----------------+--------------+ | District | City | City Population | District Max | +-----------------+---------------+-----------------+--------------+ | New South Wales | Sydney | 3276207 | 3276207 | | New South Wales | Wollongong | 219761 | 3276207 | | New South Wales | Newcastle | 270324 | 3276207 | | New South Wales | Central Coast | 227657 | 3276207 | | Victoria | Melbourne | 2865329 | 2865329 | | Victoria | Geelong | 125382 | 2865329 | | Queensland | Townsville | 109914 | 1291117 | | Queensland | Brisbane | 1291117 | 1291117 | | Queensland | Cairns | 92273 | 1291117 | | Queensland | Gold Coast | 311932 | 1291117 | | West Australia | Perth | 1096829 | 1096829 | | South Australia | Adelaide | 978100 | 978100 | | Capital Region | Canberra | 322723 | 322723 | | Tasmania | Hobart | 126118 | 126118 | +-----------------+---------------+-----------------+--------------+
Contoh ini mempartisi baris dengan District
, memberikan nilai maksimum untuk setiap partisi (distrik). Ini memungkinkan Anda melihat data yang lebih terperinci, seperti populasi setiap kota, bersama dengan populasi kota terbesar di distrik yang sama.