Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

SQL MAX() untuk Pemula

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() .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengganti Bagian dari String di T-SQL

  2. Contoh Meningkatkan Kinerja Kueri dengan Indeks

  3. Cara Menjalankan Pekerjaan Jarak Jauh dari IRI Workbench

  4. Pengelompokan dengan Pernyataan Kasus

  5. SCD Tipe 2