Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Fungsi Agregat MIN dan MAX di SQL Server

Fungsi SQL Server

Dalam sistem database pada umumnya dan SQL Server pada khususnya, fungsi adalah potongan kode yang mengambil nol atau satu masukan dan mengembalikan satu keluaran atau larik.

Fungsi Bernilai Tabel yang biasanya ditentukan pengguna dapat mengembalikan larik, tetapi fungsi SQL Server bawaan biasanya adalah Fungsi Bernilai Skalar. Kelas ketiga fungsi di SQL Server adalah Fungsi Bernilai Agregat. Fungsi MIN dan MAX SQL Server adalah Fungsi Bernilai Agregat.

Fungsi Jendela adalah kelas yang relatif baru. Mereka melakukan perhitungan seperti fungsi agregat tetapi melakukannya pada serangkaian baris yang terkait dengan baris saat ini. Sementara fungsi agregat cenderung menghasilkan satu hasil dengan mengerjakan kolom, Fungsi Jendela lebih cenderung menghasilkan hasil untuk setiap baris.

Klasifikasi Fungsi SQL Server juga dapat didasarkan pada tipe data – Fungsi String, Fungsi Numerik, dan Fungsi Tanggal. Kita dapat menyimpulkan bahwa Fungsi String beroperasi pada nilai string, misalnya, LENGTH().

MIN &MAX

Fungsi MIN dan MAX adalah fungsi agregat yang sangat sederhana. Namun, mereka dapat menjawab berbagai macam pertanyaan tergantung pada kumpulan data yang kita hadapi.

Misalnya, ketika kami mengeluarkan pernyataan SELECT, kami mengajukan pertanyaan kepada SQL Server . Oleh karena itu, kami mengatakan kami menjalankan kueri . Untuk menanyakan SQL Server tentang nilai minimum dan maksimum dalam sebuah kolom, kami menggunakan sintaks berikut:

SELECT MIN(column_name) FROM table_name;
SELECT MAX(column_name) FROM table_name;

Saat kami menggunakan sintaks ini, SQL Server mengembalikan nilai tunggal. Dengan demikian, kita dapat mempertimbangkan fungsi MIN() dan MAX() Fungsi Bernilai Skalar.

Listing 1 menampilkan pernyataan sederhana untuk mendapatkan nilai minimum dan maksimum pada berat pengiriman dari Sales.Orders tabel TSQLV4 Itzik Bengan basis data:

-- Listing 1: Basic MIN() and MAX() Function Queries
USE TSQLV4
GO
SELECT * FROM [Sales].[Orders];

-- Without Column Aliases
SELECT MIN(freight) FROM [Sales].[Orders];
SELECT MAX(freight) FROM [Sales].[Orders];
-- Without Column Aliases
SELECT MIN(freight) min_freight FROM [Sales].[Orders];
SELECT MAX(freight) max_freight FROM [Sales].[Orders];

GROUP MENURUT

“Berapa berat pengiriman minimum dan maksimum per negara?” Untuk menjawab pertanyaan ini, kita memerlukan GROUP BY ayat. Contohnya ada di Daftar 2 di bawah ini.

Kueri pertama-tama mengelompokkan data menurut negara kapal, dan kemudian mengembalikan bobot pengiriman minimum dan maksimum masing-masing per negara. Kami dapat mengonfirmasi ini dengan mengeluarkan kueri terakhir dalam daftar (validasi).

-- Listing 2: MIN and MAX Freight By Country
-- Minimum by Country
SELECT shipcountry, MIN(freight) min_freight FROM [Sales].[Orders]
GROUP BY shipcountry;

-- Maximum by Country
SELECT shipcountry, MAX(freight) max_freight FROM [Sales].[Orders]
GROUP BY shipcountry;

-- Validation
SELECT * FROM [Sales].[Orders] WHERE shipcountry='Finland'
ORDER BY freight;

-- Listing 2: MIN and MAX Freight by Country
-- Minimum by Customer
SELECT custid, MIN(freight) min_freight FROM [Sales].[Orders]
GROUP BY custid;

-- Maximum by Customer
SELECT custid, MAX(freight) max_freight FROM [Sales].[Orders]
GROUP BY custid;


-- Validation
SELECT * FROM [Sales].[Orders] WHERE custid='23'
ORDER BY freight;

Gambar 3 menunjukkan hasilnya. Kita dapat melakukan hal serupa dengan kolom lain – custid kolom. Dalam hal ini, kami menjawab pertanyaan, “Berapa ketakutan minimum dan maksimum untuk setiap pelanggan?”

Pertanyaan Lainnya

Kami dapat menyelidiki data lebih lanjut untuk mengetahui negara mana yang memiliki bobot pengiriman kurang dari 1 atau lebih dari 800. Kami melakukannya dengan menggunakan HAVING klausa yang memfilter kumpulan hasil yang disegmentasikan ke dalam grup berdasarkan GROUP BY klausa.

-- Listing 3: Introducing the HAVING Clause
SELECT shipcountry, MIN(freight) min_freight FROM [Sales].[Orders]
GROUP BY shipcountry
HAVING MIN(freight)<1;

SELECT shipcountry, MAX(freight) max_freight FROM [Sales].[Orders]
GROUP BY shipcountry
HAVING MAX(freight)>800;

Bekerja dengan Tanggal

Saat menerapkan fungsi MIN() dan MAX() ke tanggal, kami berharap untuk melihat paling awal dan terbaru tanggal masing-masing. Lihat contohnya – tanggal disimpan sebagai bilangan bulat secara internal di SQL Server.

-- Listing 4: Working with Dates
SELECT MIN(orderdate) earliest_date FROM [Sales].[Orders];
SELECT MAX(orderdate) latest_date FROM [Sales].[Orders];

Kita bisa menggali lebih dalam dengan menanyakan pelanggan mana yang melakukan pemesanan pertama dan pelanggan mana yang paling baru melakukan pemesanan. Untuk itu, kita menggunakan kode pada Listing 5. Gambar 6 menunjukkan bahwa custid 85 pelanggan melakukan pesanan paling awal, sedangkan custid 9 pelanggan melakukan pemesanan terakhir.

-- Listing 5: Customer Order Dates
SELECT custid, MIN(orderdate) earliest_date FROM [Sales].[Orders]
GROUP BY custid
ORDER BY earliest_date;

SELECT custid, MAX(orderdate) latest_date FROM [Sales].[Orders]
GROUP BY custid
ORDER BY latest_date desc;

Kesimpulan

Pada artikel ini, kami secara singkat mendemonstrasikan penggunaan fungsi agregat MIN() dan MAX() di SQL Server. Peran fungsi ini adalah mengembalikan nilai minimum dan maksimum untuk rentang tertentu yang disimpan dalam kolom tabel.

Kita dapat menjawab lebih banyak pertanyaan dengan fungsi-fungsi ini dengan menggabungkannya dengan perintah T-SQL lainnya seperti klausa GROUP BY, ORDER BY, dan HAVING.

Banyak alat menyederhanakan dan mempercepat kinerja tugas tersebut, dan Anda dapat memilih solusi apa pun yang memenuhi kebutuhan Anda. Di antaranya, SQL Complete dari Devart melakukan semua manipulasi yang diperlukan dan menyediakan fitur SSMS Grid Aggregate di tempat yang menghitung MIN, MAX, dan AVG dari nilai yang dipilih dalam grid.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah saya menggunakan pernyataan CASE dalam kondisi JOIN?

  2. Cara paling elegan untuk menghasilkan permutasi di SQL server

  3. STRING_SPLIT() di SQL Server 2016 :Tindak Lanjut #1

  4. Gunakan FILEGROUP_NAME() untuk Mengembalikan Nama Filegroup di SQL Server

  5. Setara dengan MySQL PADA DUPLICATE KEY UPDATE di Sql Server