4th Jul 2022 9 minutes de lecture Les fonctions SQL MIN et MAX expliquées en 6 exemples Dorota Wdzięczna sql apprendre sql min max Table des matières Qu'est-ce que la fonction MIN() en SQL ? Qu'est-ce que la fonction MAX() en SQL ? L'échantillon de données Exemples de cas d'utilisation de MIN() et MAX() 1. Utilisation de MIN() ou MAX() comme colonne unique 2. Utilisation de MIN() et MAX() avec d'autres colonnes 3. Utilisation de MIN() et MAX() dans une même requête 4. Utilisation de MIN() ou MAX() dans la clause HAVING 5. Utilisation de MIN() ou MAX() dans une fonction de fenêtre simple 6. Utilisation de MIN/MAX dans une fonction de fenêtre partitionnée Ce que nous avons appris sur les fonctions MIN() et MAX() de SQL Que sont les fonctions SQL MIN() et MAX() ? Quand devez-vous les utiliser comme fonctions d'agrégation et quand devez-vous les utiliser avec des fonctions de fenêtre ? Nous l'expliquons à l'aide d'exemples pratiques. Il est difficile d'imaginer SQL sans les fonctions d'agrégation MIN() et MAX(). Elles sont très utiles chez de nombreux professionnels des données car elles nous permettent de résoudre de nombreux problèmes commerciaux. Dans cet article, je vais expliquer ce que fait chaque fonction et aborder plusieurs cas d'utilisation. Commençons. Qu'est-ce que la fonction MIN() en SQL ? La norme SQL, prise en charge par la plupart des moteurs de bases de données relationnelles, comprend plusieurs fonctions d'agrégation. Ces fonctions d'agrégation effectuent des calculs sur des données numériques. Le Guide du débutant sur les fonctions d'agrégation SQL les aborde toutes en détail ; cet article ne porte que sur deux de ces fonctions : MIN() et MAX(). Tout d'abord, parlons de la fonction MIN(). Elle renvoie la plus petite valeur d'un ensemble de valeurs. Ces valeurs peuvent provenir d'une colonne numérique ou être le résultat d'une expression renvoyant une valeur numérique. (Remarque : la colonne peut provenir d'une table ou d'une vue.) Il s'agit d'une fonction scalaire qui renvoie une valeur numérique. La syntaxe de la fonction MIN() est présentée ci-dessous : MIN(column_or_expression) Comme vous le voyez, cette fonction prend un argument - une colonne ou une expression avec des valeurs numériques. Il est important que les valeurs soient numériques, car la fonction trouve la valeur minimale parmi celles-ci. Par exemple, à partir de cet ensemble de valeurs ... 4, 5, 8, 2, 14 ... MIN() renvoie 2. Qu'est-ce que la fonction MAX() en SQL ? Comme MIN(), MAX() est une fonction d'agrégation qui renvoie une valeur numérique à partir d'un ensemble. La différence est qu'elle renvoie la valeur la plus grande (maximale). Les valeurs peuvent provenir d'une colonne ou être le résultat d'une expression qui renvoie une ou plusieurs valeurs numériques. Il s'agit d'une fonction scalaire qui renvoie une valeur. Voici la syntaxe de la fonction MAX(): MAX(column_or_expression) A partir de cet ensemble de valeurs ... 4, 5, 8, 2, 14 ... MAX() renvoie 14. L'échantillon de données Avant de commencer à analyser les cas d'utilisation de MIN() et MAX(), examinons les données que nous allons utiliser dans la table cosmetics: idnamecategorydelivered_yearprice 1shampoohair202011 2night creamface202012 3cleanserface20205 4brushhair20203 5mascaraeye20218 6eyebroweye202115 7conditionerhair202121 8sprayhair202113 9eyelinereye202120 10tonicface202021 11face maskface202110 12eye creameye202122 13hair maskhair20203 Cette table stocke des informations sur les produits cosmétiques dans trois catégories (la colonne category) : cheveux, visage et yeux. Les noms des produits figurent dans la colonne nom. Les deux dernières colonnes contiennent des données sur la date de livraison du produit (delivered_year) et son prix ( price). Il n'y a que deux années (2020 et 2021) dans la colonne delivered_year. Si vous avez besoin d'aide pour comprendre les instructions et les fonctions SQL que nous utilisons dans cet article, essayez la fiche d'aide SQL pour les débutants . Exemples de cas d'utilisation de MIN() et MAX() 1. Utilisation de MIN() ou MAX() comme colonne unique Les fonctions agrégées comme MIN() peuvent être utilisées comme une seule colonne dans la requête SELECT. Par exemple : SELECT MIN(price) FROM cosmetics; Voici le résultat : min 3 Après le mot-clé SELECT, nous mettons MIN() et le nom de la colonne (dans ce cas, price). Ensuite, nous mettons le mot-clé FROM et le nom de la table (cosmetics). Le résultat est la plus petite valeur de la colonne price, qui est 3. Vous pouvez utiliser MAX() exactement de la même manière pour trouver le prix du produit le plus élevé : SELECT MAX(price) FROM cosmetics; Et voici le résultat : max 22 Le prix maximum dans la table cosmetics est 22 (le prix de la crème pour les yeux). L'article Comment trouver les valeurs minimales dans les colonnes vous donne plus d'exemples sur la façon de trouver la valeur minimale. 2. Utilisation de MIN() et MAX() avec d'autres colonnes Une utilisation plus avancée des fonctions MIN() ou MAX() consiste à les utiliser sur des groupes de lignes. Voici une autre requête : SELECT category, MAX(price) AS max_price FROM cosmetics GROUP BY category; Elle renvoie les données : categorymax_price hair21 face21 eye22 Il y a d'abord le mot-clé SELECT avec le nom de la colonne (category), puis la fonction MAX() avec la colonne price comme argument. Ensuite, nous avons max_price, l'alias de la nouvelle colonne créée par MAX(). Ensuite, nous avons le mot-clé FROM et le nom de la table. À la fin, nous avons la clause GROUP BY avec la colonne category. Cela détermine les groupes (c'est-à-dire que les produits sont regroupés par catégorie). Pour chaque groupe, nous obtenons sa plus grande valeur - dans ce cas, le prix le plus élevé parmi les produits de cette catégorie. Dans la catégorie "yeux", le prix le plus élevé est de 22 $ ; dans les catégories "visage" et "cheveux", il est de 21 $. L'article Comment trouver les valeurs maximales dans les rangées vous donne d'autres exemples de cette fonction. 3. Utilisation de MIN() et MAX() dans une même requête Vous pouvez utiliser les fonctions MIN et MAX dans une seule SELECT. Si vous utilisez uniquement ces fonctions sans aucune colonne, vous n'avez pas besoin de la clause GROUP BY. Nous présentons ci-dessous une requête qui met en œuvre les deux fonctions : SELECT MIN(price) AS min_price, MAX(price) AS max_price FROM cosmetics; Cette requête renvoie les données : min_pricemax_price 322 Dans SELECT, nous avons la fonction MIN() avec l'argument de la colonne price suivie de MAX() avec le même argument et leurs alias respectifs. Cette requête renvoie le prix minimum (3 $) et le prix maximum (22 $) pour tous les produits de la table. Bien entendu, vous pouvez faire de même en calculant le prix minimum et maximum pour chaque catégorie. Cependant, ici, vous devrez utiliser GROUP BY : SELECT category, MIN(price) AS min_price, MAX(price) AS max_price FROM cosmetics GROUP BY category; Voici l'ensemble des résultats : categorymin_pricemax_price hair321 face521 eye822 Dans ce cas, le prix minimum dans la catégorie "cheveux" est de 3 $ et le prix maximum de 21 $, tandis que dans la catégorie "yeux", la valeur la plus basse est de 8 $ et la plus haute de 22 $. Vous pouvez en savoir plus sur la recherche des valeurs minimales et maximales dans les articles Comment trouver la valeur minimale d'une colonne en SQL et Comment trouver la valeur maximale d'une colonne numérique en SQL. 4. Utilisation de MIN() ou MAX() dans la clause HAVING Une autre façon d'utiliser MIN() ou MAX() consiste à filtrer les lignes en fonction de la valeur renvoyée par cette fonction - c'est-à-dire dans la clause HAVING. La requête ci-dessous met en œuvre MIN() dans HAVING: SELECT category, MAX(price) AS max_price FROM cosmetics GROUP BY category HAVING MIN(price)>4; Le jeu de résultats : categorymax_price face21 eye22 Dans SELECT, nous avons la colonne category. Ensuite, nous utilisons la fonction MAX() avec price comme argument. Pour chaque catégorie, on va calculer le prix maximum parmi les produits appartenant à cette catégorie. Après FROM cosmetics vient la clause GROUP BY avec la colonne category. A la fin de la requête se trouve la clause HAVING avec la fonction MIN(). Celle-ci trouvera le prix le plus bas parmi les produits de chaque catégorie ; si ce prix est inférieur à 4, il ne sera pas inclus dans les résultats. Comme le prix minimum dans la catégorie "cheveux" est de 3 $, il n'a pas été affiché dans l'ensemble des résultats. Notez que l'utilisation de l'une ou l'autre des fonctions dans HAVING ne nécessite pas son utilisation (ou celle de toute autre fonction d'agrégation) dans SELECT. 5. Utilisation de MIN() ou MAX() dans une fonction de fenêtre simple L'utilisation la plus avancée de MIN() ou MAX() est dans une fonction fenêtre. Si vous n'êtes pas familier avec les fonctions de fenêtre, lisez l'article Exemples de fonctions de fenêtre SQL avec explications. Voici une fonction fenêtre simple qui utilise la fonction MIN(): SELECT name, price, category, delivered_year, MIN(price) OVER (ORDER BY category DESC) AS min_price FROM cosmetics; La première chose que vous pouvez remarquer est la liste des colonnes de SELECT: name, price, category, delivered_year. Vient ensuite la fonction d'agrégation MIN(price), qui trouve la valeur la plus basse dans la colonne price. OVER est la raison pour laquelle il s'agit d'une fonction de fenêtre ; elle définit la fenêtre. ou l'ensemble des lignes dans le jeu de résultats de la requête. Cela nous permet de calculer une valeur agrégée pour chaque ligne de la fenêtre. Ici, OVER est associé à la catégorie ORDER BY DESC (c'est-à-dire par ordre décroissant) ; ainsi, le prix minimum est toujours de 3 $, car le prix le plus bas dans la catégorie "cheveux" est de 3 $, ce qui est inférieur au prix minimum de la catégorie suivante, qui est de 5 $. Voici le résultat : namepricecategorydelivered_yearmin_price hair mask3hair20203 brush3hair20203 conditioner21hair20213 spray13hair20213 shampoo11hair20203 night cream12face20203 cleanser5face20203 tonic21face20203 face mask10face20213 mascara8eye20213 eye cream22eye20213 eyeliner20eye20213 eyebrow15eye20213 6. Utilisation de MIN/MAX dans une fonction de fenêtre partitionnée Ensuite, utilisons MIN() ou MAX() dans une fonction fenêtre comportant la clause PARTITION BY. (Si vous avez besoin de vous rafraîchir la mémoire sur PARTITION BY, jetez un coup d'œil à la fiche de conseils SQL Fonctions de fenêtrage .) Voici la requête : SELECT name, price, category, delivered_year, MIN(price) OVER (PARTITION BY delivered_year ORDER BY category DESC) AS min_price FROM cosmetics; Cette requête calcule le prix minimum pour chaque partition sur la base de la colonne delivered_year et trie les lignes par catégorie. Elle renvoie le jeu de résultats suivant : namepricecategorydelivered_yearmin_price shampoo11hair20203 brush3hair20203 hair mask3hair20203 tonic21face20203 night cream12face20203 cleanser5face20203 spray13hair202113 conditioner21hair202113 face mask10face202110 eyeliner20eye20218 mascara8eye20218 eyebrow15eye20218 eye cream22eye20218 Ces résultats contiennent la liste des cosmétiques, avec leur nom, leur prix, leur catégorie et l'année de livraison. Chaque ligne contient également le prix minimum pour cette année de livraison (qui est la partition). Dans chaque partition, les lignes sont triées en ordre décroissant par catégorie. Dans ce cas, la clause OVER contient les clauses ORDER BY et PARTITION BY. PARTITION BY delivered_year indique que le prix minimum est calculé séparément pour chaque année. Les enregistrements de chaque partition (l'année où les produits ont été livrés) sont triés par catégorie dans l'ordre décroissant (ORDER BY catégorie DESC). Ce que nous avons appris sur les fonctions MIN() et MAX() de SQL Les fonctions d'agrégation SQL MIN() et MAX() sont très populaires. Dans cet article, j'ai expliqué comment les utiliser dans différents cas. La principale différence entre elles est que MIN() trouve la valeur minimale dans un ensemble de valeurs, tandis que MAX() renvoie la valeur maximale. Maintenant que vous savez comment utiliser MIN() et MAX(), vous êtes prêt à.. : Trouver les valeurs les plus grandes/petites parmi toutes les lignes ou groupes de lignes donnés. Comparer les valeurs minimales et maximales avec d'autres lignes. Utiliser ces fonctions sur des partitions et sur des fonctions de fenêtre simples. Pour plus d'informations sur les différences entre les valeurs agrégées et les fonctions de fenêtre, essayez notre article SQL Fonctions de fenêtrage vs. SQL Aggregate Functions : Similitudes et différences. Si vous êtes un débutant et que vous souhaitez approfondir vos connaissances de SQL, je vous recommande le cours de LearnSQL.fr. SQL pour les débutants de . Mais si vous êtes déjà familiarisé avec le langage SQL de base, vous pouvez suivre notre formation Fonctions de fenêtrage pour améliorer vos compétences. Tags: sql apprendre sql min max