Plongeons dans le monde des extrêmes dans les données — la recherche des valeurs minimales et maximales. T’inquiète, SQL ne va pas te forcer à apprendre un truc fondamentalement nouveau, mais tu vas voir comment choper les plus grandes et les plus petites valeurs dans une table. Ces fonctions sont partout : de l’analyse des notes de films sur IMDb au calcul de la température minimale sur Mars.
MIN() et MAX() sont des fonctions d’agrégation qui renvoient la valeur minimale et maximale d’un ensemble de données. Elles bossent comme des chasseurs sympas d’extrêmes : MIN() cherche l’élément le plus petit, MAX() au contraire, le plus grand. Et ce n’est pas que pour les nombres : tu peux aussi chercher la chaîne ou la date la plus petite ou la plus grande.
-- Forme générale des fonctions MIN et MAX
SELECT
MIN(column_name) AS min_value,
MAX(column_name) AS max_value
FROM table_name;
Facile et rapide ! Maintenant, voyons comment cette magie marche dans différents scénarios.
Syntaxe et exemples de base
Données numériques
Imaginons qu’on a une table employees avec une colonne pour les salaires (salary).
On veut savoir le salaire minimal et maximal.
Table employees
| id | name | salary |
|---|---|---|
| 1 | Anna Song | 45000 |
| 2 | Otto Art | 30000 |
| 3 | Maria Chi | 120000 |
| 4 | Alex Lin | 90000 |
| 5 | Eva Tan | 60000 |
-- Exemple pour les données numériques
SELECT
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees;
Résultat
| min_salary | max_salary |
|---|---|
| 30000 | 120000 |
Données textuelles
Tu peux utiliser MIN() et MAX() avec des données textuelles.
Elles sont comparées par ordre alphabétique (ouais, même les lettres peuvent être "les plus petites" ou "les plus grandes").
Imaginons une table students où la colonne name contient les prénoms des étudiants.
Table students
| id | name |
|---|---|
| 1 | Anna |
| 2 | Otto |
| 3 | Maria |
| 4 | Ben |
| 5 | Zoe |
-- Exemple pour les données textuelles
SELECT
MIN(name) AS first_name_in_order,
MAX(name) AS last_name_in_order
FROM students;
Résultat
| first_name_in_order | last_name_in_order |
|---|---|
| Anna | Zoe |
Dates et heures
On cherche la date la plus ancienne et la plus récente dans la table events.
Table events
| id | event_name | event_date |
|---|---|---|
| 1 | New Year Party | 2023-01-01 |
| 2 | Summer Fest | 2023-06-15 |
| 3 | Halloween Bash | 2023-10-31 |
| 4 | Year End Gala | 2023-12-31 |
-- Exemple pour les dates
SELECT
MIN(event_date) AS earliest_date,
MAX(event_date) AS latest_date
FROM events;
Résultat
| earliest_date | latest_date |
|---|---|
| 2023-01-01 | 2023-12-31 |
Utilisation de MIN() et MAX() dans les tables avec des valeurs NULL
Si une colonne contient des valeurs NULL, tu peux dormir tranquille : SQL les ignore dans les calculs.
Ça veut dire que MIN() et MAX() ne bossent qu’avec les valeurs "normales".
Table employees_with_null
| id | name | salary |
|---|---|---|
| 1 | Otto | 30000 |
| 2 | Maria | NULL |
| 3 | Anna | 120000 |
| 4 | John | NULL |
-- Table avec des NULL
SELECT
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees_with_null;
Si la colonne salary contient des NULL, ils sont juste ignorés.
| min_salary | max_salary |
|---|---|
| 30000 | 120000 |
Mais si TOUTE la colonne est remplie de NULL, le résultat sera NULL.
Exemples d’utilisation de MIN() et MAX() dans des cas réels
Déterminer l’employé le plus âgé et le plus jeune
Table employees
| id | name | birth_date |
|---|---|---|
| 1 | Otto | 1980-05-10 |
| 2 | Maria | 1990-11-20 |
| 3 | Anna | 1975-03-15 |
| 4 | John | 2000-08-01 |
Dans la table employees il y a un champ birth_date qui stocke les dates de naissance des employés. On va trouver le plus âgé et le plus jeune.
SELECT
MIN(birth_date) AS oldest_employee,
MAX(birth_date) AS youngest_employee
FROM employees;
Résultat :
| oldest_employee | youngest_employee |
|---|---|
| 1975-03-15 | 2000-08-01 |
Analyse des ventes
| id | amount |
|---|---|
| 1 | 150.00 |
| 2 | 75.50 |
| 3 | 200.00 |
| 4 | 120.00 |
| 5 | 500.00 |
| 6 | 90.00 |
Dans la table sales il y a un champ amount qui stocke les montants des ventes. On va trouver la plus petite et la plus grande vente.
SELECT
MIN(amount) AS smallest_sale,
MAX(amount) AS largest_sale
FROM sales;
Résultat de la requête
| smallest_sale | largest_sale |
|---|---|
| 75.50 | 500.00 |
Trouver la toute première et la toute dernière commande
Si tu as une table orders avec un champ order_date, tu peux facilement trouver la première et la dernière date de commande.
Table d’origine orders
| order_id | customer_id | order_date | amount |
|---|---|---|---|
| 101 | 1 | 2023-01-15 10:23:00 | 250.00 |
| 102 | 2 | 2023-02-10 14:45:00 | 150.00 |
| 103 | 3 | 2023-01-05 09:10:00 | 300.00 |
| 104 | 1 | 2023-03-22 16:30:00 | 500.00 |
| 105 | 4 | 2023-01-25 11:00:00 | 120.00 |
SELECT
MIN(order_date) AS first_order,
MAX(order_date) AS last_order
FROM orders;
Résultat de la requête :
| first_order | last_order |
|---|---|
| 2023-01-05 09:10:00 | 2023-03-22 16:30:00 |
Particularités de MIN() et MAX()
Comparaison de textes : quand tu bosses avec des chaînes, MIN() et MAX() les comparent par ordre alphabétique.
Gestion des NULL : NULL est ignoré s’il y a d’autres valeurs dans la colonne. Mais si tout est NULL, le résultat sera NULL.
Comparaison de dates : SQL prend en compte non seulement l’année, mais aussi le mois, le jour, l’heure, les minutes.
GO TO FULL VERSION