Dalam SQL, MAX()
fungsi adalah fungsi agregat yang mengembalikan nilai maksimum 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
Kita dapat menggunakan query berikut untuk mendapatkan harga maksimum dari tabel tersebut.
SELECT MAX(ProductPrice)
FROM Products;
Hasil:
+--------------------+ | (No column name) | |--------------------| | 245.00 | +--------------------+
Dalam hal ini, informasi harga disimpan di ProductPrice
kolom, jadi kami meneruskannya sebagai argumen ke MAX()
fungsi, yang kemudian menghitung dan mengembalikan hasilnya.
Menggunakan Alias Kolom
Anda akan melihat bahwa hasil sebelumnya tidak menyertakan nama kolom. Beberapa DBMS mungkin menggunakan sesuatu seperti MAX(ProductPrice)
sebagai nama kolom. Ini sudah diduga, karena MAX()
fungsi tidak mengembalikan kolom apa pun. Anda dapat dengan mudah memberikan nama kolom dengan menetapkan alias.
SELECT MAX(ProductPrice) AS MaximumPrice
FROM Products;
Hasil:
+----------------+ | MaximumPrice | |----------------| | 245.00 | +----------------+
Hasil yang Difilter
MAX()
fungsi beroperasi pada baris yang dikembalikan oleh kueri. Jadi jika Anda memfilter hasilnya, hasil dari MAX()
akan mencerminkan hal itu.
SELECT MAX(ProductPrice) AS MaximumPrice
FROM Products
WHERE VendorId = 1001;
Hasil:
+----------------+ | MaximumPrice | |----------------| | 25.99 | +----------------+
Dalam hal ini, 25,99 adalah harga maksimum dari semua produk yang ditawarkan oleh vendor yang ditentukan.
NULL
Nilai
MAX()
fungsi mengabaikan NULL
nilai-nilai. Dalam tabel contoh kami di atas, nomor produk 6
telah mendapat NULL
dalam ProductPrice
kolom, tapi itu diabaikan di MAX()
. 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 MAX(ProductPrice) AS MaximumPrice
FROM Products;
Hasil:
+----------------+ | MaximumPrice | |----------------| | 245.00 | +----------------+ 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 MAX()
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 bisa menggunakan MAX()
untuk menemukan tanggal lahir maksimum (DOB
).
SELECT MAX(DOB) AS MaxDOB
FROM Pets;
Hasil:
+------------+ | MaxDOB | |------------| | 2020-11-28 | +------------+
Ini akan menjadi tanggal lahir hewan peliharaan termuda. Seperti yang disebutkan, itu mengabaikan NULL
nilai.
Data Karakter
Saat digunakan dengan kolom data karakter, MAX()
menemukan nilai tertinggi dalam urutan penyusunan.
Contoh:
SELECT MAX(ProductName) AS MaximumProductName
FROM Products;
Hasil:
+----------------------+ | MaximumProductName | |----------------------| | Straw Dog Box | +----------------------+
Yang DISTINCT
Kata kunci
DBMS Anda dapat mengizinkan DISTINCT
kata kunci yang akan digunakan dengan MAX()
fungsi. Jika demikian, ini mungkin untuk memenuhi standar ISO SQL.
Oleh karena itu, Anda mungkin dapat melakukan ini:
SELECT MAX(DISTINCT ProductPrice) AS MaximumPrice
FROM Products;
Hasil:
+----------------+ | MaximumPrice | |----------------| | 245.00 | +----------------+
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 MAX()
. DISTINCT
kata kunci menghapus duplikat, tetapi dalam kasus MAX()
tidak akan ada bedanya karena MAX()
mengembalikan hasil yang sama terlepas dari berapa banyak baris yang berbagi nilai maksimum yang sama.
Fungsi Jendela
Bergantung pada DBMS Anda, Anda mungkin dapat menggunakan OVER
klausa dengan MAX()
. 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 MAX()
fungsi dengan OVER
klausa untuk menerapkan fungsi jendela ke data.
SELECT
v.VendorName,
p.ProductName,
p.ProductPrice,
MAX(ProductPrice) OVER (PARTITION BY v.VendorName) AS "Maximum Price For This Vendor"
FROM Products p
INNER JOIN Vendors v
ON v.VendorId = p.VendorId
ORDER BY VendorName, ProductPrice, "Maximum Price For This Vendor";
Hasil:
+---------------+---------------------------------+----------------+---------------------------------+ | VendorName | ProductName | ProductPrice | Maximum Price For This Vendor | |---------------+---------------------------------+----------------+---------------------------------| | Katty Kittens | Bottomless Coffee Mugs (4 Pack) | 9.99 | 9.99 | | Mars Supplies | Long Weight (green) | 11.99 | 25.99 | | Mars Supplies | Long Weight (blue) | 14.75 | 25.99 | | Mars Supplies | Left handed screwdriver | 25.99 | 25.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 MAX()
. kami berfungsi untuk mempartisi hasil berdasarkan nama vendor.
Dengan melakukan ini, kami dapat mengembalikan informasi harga untuk setiap produk, serta harga maksimum untuk semua produk dari vendor tersebut. Harga maksimum ini berubah seiring perubahan vendor (kecuali beberapa vendor memiliki harga maksimum 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()
, MIN()
, AVG()
, dan COUNT()
.