Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Funzioni di aggregazione MIN e MAX in SQL Server

Funzioni di SQL Server

Nei sistemi di database in generale e in SQL Server in particolare, le funzioni sono parti di codice che accettano zero o un input e restituiscono un singolo output o un array.

Le funzioni con valori di tabella in genere definite dall'utente possono restituire una matrice, ma le funzioni predefinite di SQL Server sono in genere funzioni con valori scalari. La terza classe di funzioni in SQL Server sono le funzioni con valori aggregati. Le funzioni MIN e MAX di SQL Server sono funzioni a valore aggregato.

Le funzioni finestra sono una classe relativamente nuova. Eseguono calcoli come funzioni aggregate ma lo fanno su un insieme di righe relative alla riga corrente. Mentre è probabile che una funzione aggregata produca un singolo risultato lavorando su una colonna, è più probabile che una funzione finestra produca un risultato per ogni riga.

La classificazione delle funzioni di SQL Server può anche basarsi sul tipo di dati:funzioni di stringa, funzioni numeriche e funzioni di data. Possiamo dedurre che le funzioni di stringa operano su valori di stringa, ad esempio, LENGTH().

MIN E MAX

Le funzioni MIN e MAX sono funzioni aggregate molto semplici. Tuttavia, possono rispondere a un'ampia varietà di domande a seconda del set di dati con cui abbiamo a che fare.

Ad esempio, quando emettiamo l'istruzione SELECT, poniamo a SQL Server una domanda . Quindi, diciamo che stiamo eseguendo una query . Per chiedere a SQL Server i valori minimo e massimo in una colonna, utilizziamo la seguente sintassi:

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

Quando utilizziamo questa sintassi, SQL Server restituisce un singolo valore. Pertanto, possiamo considerare le funzioni MIN() e MAX() Funzioni scalari.

Il Listato 1 mostra la semplice dichiarazione per ricavare i valori minimo e massimo sul peso del trasporto da Sales.Orders tabella di TSQLV4 di Itzik Bengan banca dati:

-- 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];

GRUPPO PER

"Qual è il peso minimo e massimo del trasporto per paese?" Per rispondere a questa domanda, abbiamo bisogno del GRUPPO PER clausola. L'esempio è nel Listato 2 di seguito.

La query prima raggruppa i dati per shipcountry, e quindi restituisce rispettivamente il peso minimo e massimo del trasporto per paese. Possiamo confermarlo emettendo l'ultima query nell'elenco (convalida).

-- 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;

La figura 3 mostra i risultati. Possiamo fare qualcosa di simile con un'altra colonna:il custid colonna. In questo caso, stiamo rispondendo alla domanda, "Qual è lo spavento minimo e massimo per ogni cliente?"

Altre domande

Possiamo sondare ulteriormente i dati per scoprire quali paesi hanno un peso delle merci inferiore a 1 o superiore a 800. Lo facciamo utilizzando HAVING clausola che filtra i set di risultati segmentati in gruppi da GROUP BY clausola.

-- 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;

Lavorare con le date

Quando si applicano le funzioni MIN() e MAX() alle date, ci si aspetta di vedere la prima e più recenti rispettivamente le date. Dai un'occhiata agli esempi:le date vengono archiviate come numeri interi internamente in SQL Server.

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

Possiamo approfondire chiedendo quale cliente ha effettuato il primo ordine e quale cliente ha effettuato l'ordine più recente. Per questo, utilizziamo il codice nel Listato 5. La Figura 6 mostra che il custid 85 il cliente ha eseguito il primo ordine, mentre il custid 9 cliente ha effettuato l'ultimo ordine.

-- 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;

Conclusione

In questo articolo è stato illustrato brevemente l'utilizzo delle funzioni di aggregazione MIN() e MAX() in SQL ServerSQL Server. Il ruolo di queste funzioni è restituire i valori minimo e massimo per un determinato intervallo archiviato in una colonna di tabella.

Possiamo rispondere a più domande con queste funzioni combinandole con altri comandi T-SQL come le clausole GROUP BY, ORDER BY e HAVING.

Molti strumenti semplificano e accelerano le prestazioni di tali attività e puoi scegliere qualsiasi soluzione che soddisfi le tue esigenze. Tra questi, SQL Complete di Devart esegue tutte le manipolazioni necessarie e fornisce una funzione SSMS Grid Aggregate sul posto che calcola MIN, MAX e AVG dei valori selezionati nella griglia.