Le MySQL MIN()
function est une fonction d'agrégation qui renvoie la valeur minimale d'une expression.
En règle générale, l'expression serait une plage de valeurs renvoyées sous forme de lignes distinctes dans une colonne, et vous pouvez utiliser cette fonction pour trouver la valeur minimale à partir des lignes renvoyées. S'il n'y a pas de lignes correspondantes, MIN()
renvoie NULL
.
Par exemple, vous pouvez utiliser cette fonction pour savoir quelle ville a la plus petite population parmi une liste de villes.
Syntaxe
La syntaxe de MIN()
va comme ceci :
MIN([DISTINCT] expr) [over_clause]
Où expr
est l'expression pour laquelle vous voulez la valeur minimale.
La over_clause
est une clause facultative qui fonctionne avec les fonctions de fenêtre. Notez que la over_clause
ne peut être utilisé que si vous n'utilisez pas le DISTINCT
mot-clé.
Le DISTINCT
(optionnel) le mot-clé peut être utilisé pour éliminer les valeurs en double.
Exemple de base
Tout d'abord, voici les données brutes que nous utiliserons dans cet exemple :
USE world; SELECT Name, Population FROM City WHERE CountryCode = 'THA';
Résultat :
+-------------------+------------+ | Name | Population | +-------------------+------------+ | Bangkok | 6320174 | | Nonthaburi | 292100 | | Nakhon Ratchasima | 181400 | | Chiang Mai | 171100 | | Udon Thani | 158100 | | Hat Yai | 148632 | | Khon Kaen | 126500 | | Pak Kret | 126055 | | Nakhon Sawan | 123800 | | Ubon Ratchathani | 116300 | | Songkhla | 94900 | | Nakhon Pathom | 94100 | +-------------------+------------+
Nous pouvons utiliser le MIN()
fonction pour trouver la ville avec la plus petite population (c'est-à-dire la ligne avec la plus petite valeur dans sa colonne de population).
USE world; SELECT MIN(Population) AS 'Minimum Value' FROM City WHERE CountryCode = 'THA';
Résultat :
+---------------+ | Minimum Value | +---------------+ | 94100 | +---------------+
La clause GROUP BY
Nous pouvons utiliser le GROUP BY
clause pour répertorier chaque district, ainsi que la population de la plus petite ville de ce district (par population) :
USE world; SELECT District, MIN(Population) AS 'Minimum Value' FROM City WHERE CountryCode = 'AUS' GROUP BY District;
Résultat :
+-----------------+---------------+ | District | Minimum Value | +-----------------+---------------+ | New South Wales | 219761 | | Victoria | 125382 | | Queensland | 92273 | | West Australia | 1096829 | | South Australia | 978100 | | Capital Region | 322723 | | Tasmania | 126118 | +-----------------+---------------+
La clause ORDER BY
Nous pouvons également utiliser le ORDER BY
clause pour spécifier une colonne avec laquelle ordonner par :
USE world; SELECT District, MIN(Population) AS 'Minimum Value' FROM City WHERE CountryCode = 'AUS' GROUP BY District ORDER BY `Minimum Value` ASC;
Résultat :
+-----------------+---------------+ | District | Minimum Value | +-----------------+---------------+ | Queensland | 92273 | | Victoria | 125382 | | Tasmania | 126118 | | New South Wales | 219761 | | Capital Region | 322723 | | South Australia | 978100 | | West Australia | 1096829 | +-----------------+---------------+
Cela classe les résultats dans l'ordre croissant, qui répertorie la valeur minimale en premier.
Notez que, lors de la commande par un alias de plusieurs mots (comme `Minimum Value`
), vous devez utiliser le caractère backtick (`
) au lieu de l'apostrophe ('
) pour entourer les deux mots.
Trouvez la longueur minimale des caractères
Le MIN()
La fonction n'est pas limitée aux seules colonnes avec des données numériques. Vous pouvez également combiner MIN()
avec d'autres fonctions pour renvoyer des valeurs minimales dans d'autres domaines.
Par exemple, en utilisant nos exemples de données, nous pouvons trouver la valeur avec le nombre minimum de caractères dans la City
colonne :
SELECT MIN(CHAR_LENGTH(Name)) AS 'Minimum Character Length' FROM city;
Résultat :
+--------------------------+ | Minimum Character Length | +--------------------------+ | 3 | +--------------------------+
Nous pouvons également le voir en utilisant la requête suivante (qui n'implique pas le MIN()
fonction):
SELECT Name, CHAR_LENGTH(Name) AS 'Character Length' FROM city ORDER BY `Character Length` LIMIT 10;
Résultat :
+------+------------------+ | Name | Character Length | +------+------------------+ | Ome | 3 | | Yao | 3 | | Qom | 3 | | Itu | 3 | | Tsu | 3 | | Ube | 3 | | Ise | 3 | | Uji | 3 | | Ede | 3 | | Ota | 3 | +------+------------------+
Étant donné que plusieurs villes ont la même longueur de caractères, nous pouvons ajuster cette requête pour ne renvoyer que les valeurs distinctes :
SELECT DISTINCT CHAR_LENGTH(Name) AS 'Character Length' FROM city ORDER BY `Character Length` LIMIT 10;
Résultat :
+------------------+ | Character Length | +------------------+ | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | +------------------+
Utiliser une clause OVER
Comme mentionné, la syntaxe permet un OVER
clause à inclure dans vos requêtes. Fondamentalement, le OVER
La clause vous permet de spécifier comment partitionner les lignes de requête en groupes pour le traitement par la fonction de fenêtre.
Voici un exemple :
SELECT District, Name AS City, Population AS 'City Population', MIN(Population) OVER(PARTITION BY District) AS 'District Minimum' FROM City WHERE CountryCode = 'AUS' ORDER BY `District Minimum` DESC;
Résultat :
+-----------------+---------------+-----------------+------------------+ | District | City | City Population | District Minimum | +-----------------+---------------+-----------------+------------------+ | West Australia | Perth | 1096829 | 1096829 | | South Australia | Adelaide | 978100 | 978100 | | Capital Region | Canberra | 322723 | 322723 | | New South Wales | Sydney | 3276207 | 219761 | | New South Wales | Wollongong | 219761 | 219761 | | New South Wales | Newcastle | 270324 | 219761 | | New South Wales | Central Coast | 227657 | 219761 | | Tasmania | Hobart | 126118 | 126118 | | Victoria | Melbourne | 2865329 | 125382 | | Victoria | Geelong | 125382 | 125382 | | Queensland | Townsville | 109914 | 92273 | | Queensland | Brisbane | 1291117 | 92273 | | Queensland | Cairns | 92273 | 92273 | | Queensland | Gold Coast | 311932 | 92273 | +-----------------+---------------+-----------------+------------------+
Cet exemple partitionne les lignes par District
, fournissant la valeur minimale pour chaque partition (district). Cela vous permet de voir des données plus précises, telles que la population de chaque ville, ainsi que la population de la plus petite ville (par population) dans le même district.