Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fonctions d'agrégation MIN et MAX dans SQL Server

Fonctions SQL Server

Dans les systèmes de base de données en général et dans SQL Server en particulier, les fonctions sont des morceaux de code qui acceptent zéro ou une entrée et renvoient une sortie unique ou un tableau.

Les fonctions de table qui sont généralement définies par l'utilisateur peuvent renvoyer un tableau, mais les fonctions SQL Server intégrées sont généralement des fonctions de valeur scalaire. La troisième classe de fonctions dans SQL Server sont les fonctions à valeur agrégée. Les fonctions MIN et MAX SQL Server sont des fonctions à valeur agrégée.

Les fonctions de fenêtre sont une classe relativement nouvelle. Ils effectuent des calculs comme des fonctions d'agrégat mais le font sur un ensemble de lignes liées à la ligne actuelle. Alors qu'une fonction d'agrégation est susceptible de produire un seul résultat en travaillant sur une colonne, une fonction de fenêtre est plus susceptible de produire un résultat pour chaque ligne.

La classification des fonctions SQL Server peut également s'appuyer sur le type de données :fonctions de chaîne, fonctions numériques et fonctions de date. Nous pouvons en déduire que les fonctions de chaîne opèrent sur des valeurs de chaîne, par exemple, LENGTH().

MIN &MAX

Les fonctions MIN et MAX sont des fonctions d'agrégat très simples. Néanmoins, ils peuvent répondre à une grande variété de questions en fonction de l'ensemble de données que nous traitons.

Par exemple, lorsque nous émettons l'instruction SELECT, nous posons une question à SQL Server . Par conséquent, nous disons que nous exécutons une requête . Pour demander à SQL Server les valeurs minimales et maximales d'une colonne, nous utilisons la syntaxe suivante :

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

Lorsque nous utilisons cette syntaxe, SQL Server renvoie une seule valeur. Ainsi, nous pouvons considérer les fonctions MIN() et MAX() Fonctions à valeurs scalaires.

La liste 1 affiche la déclaration simple pour dériver les valeurs minimales et maximales du poids du fret à partir de Sales.Orders tableau du TSQLV4 d'Itzik Bengan base de données :

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

REGROUPER PAR

"Quels sont les poids de fret minimum et maximum par pays ?" Pour répondre à cette question, nous avons besoin du GROUP BY clause. L'exemple est dans la liste 2 ci-dessous.

La requête regroupe d'abord les données par shipcountry, puis il renvoie les poids de fret minimum et maximum respectivement par pays. Nous pouvons le confirmer en émettant la dernière requête de la liste (validation).

-- 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 figure 3 montre les résultats. Nous pouvons faire quelque chose de similaire avec une autre colonne - le custid colonne. Dans ce cas, nous répondons à la question :« Quelle est la peur minimale et maximale pour chaque client ? »

Plus de questions

Nous pouvons approfondir les données pour savoir quels pays ont des poids de fret inférieurs à 1 ou supérieurs à 800. Nous le faisons en utilisant le HAVING clause qui filtre les jeux de résultats segmentés en groupes par le GROUP BY clause.

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

Travailler avec les dates

Lors de l'application des fonctions MIN() et MAX() aux dates, nous nous attendons à voir le plus tôt et le plus récent dates respectivement. Jetez un œil aux exemples - les dates sont stockées sous forme d'entiers en interne dans SQL Server.

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

Nous pouvons creuser plus profondément en demandant quel client a passé la première commande et quel client a passé la commande la plus récente. Pour cela, nous utilisons le code du Listing 5. La figure 6 montre que le custid 85 client a effectué la première commande, tandis que le custid 9 client a passé la dernière commande.

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

Conclusion

Dans cet article, nous avons brièvement démontré l'utilisation des fonctions d'agrégation MIN() et MAX() dans SQL Server. Le rôle de ces fonctions est de renvoyer les valeurs minimales et maximales pour une plage donnée stockée dans une colonne de table.

Nous pouvons répondre à plus de questions avec ces fonctions en les combinant avec d'autres commandes T-SQL telles que les clauses GROUP BY, ORDER BY et HAVING.

De nombreux outils simplifient et accélèrent l'exécution de ces tâches, et vous pouvez choisir n'importe quelle solution qui répond à vos besoins. Parmi eux, SQL Complete de Devart effectue toutes les manipulations nécessaires et fournit une fonctionnalité SSMS Grid Aggregate sur place qui calcule MIN, MAX et AVG des valeurs sélectionnées dans la grille.