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

MIN() - Trouver la valeur minimale dans une colonne dans MySQL

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]

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.