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

SQL MIN() untuk Pemula

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Query untuk Membandingkan Penjualan Produk Berdasarkan Bulan

  2. Mengoptimalkan Kueri Pembaruan

  3. Batas Kursor Kueri API Salesforce

  4. Mempertahankan MAX (atau MIN) berjalan yang dikelompokkan

  5. Cara Menambahkan Posisi Peringkat Baris dalam SQL dengan RANK()