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

MAX () - Trouver la valeur maximale dans une colonne dans MySQL

Le MySQL MAX() La fonction est une fonction d'agrégation qui renvoie la valeur maximale 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 maximale à partir des lignes renvoyées. S'il n'y a pas de lignes correspondantes, MAX() renvoie NULL .

Par exemple, vous pouvez utiliser cette fonction pour savoir quelle ville a la plus grande population parmi une liste de villes.

Syntaxe

La syntaxe de MAX() va comme ceci :

MAX([DISTINCT] expr) [over_clause]

expr est l'expression pour laquelle vous voulez la valeur maximale.

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 MAX() fonction pour trouver la ville avec la plus grande population (c'est-à-dire la ligne avec la valeur maximale dans sa colonne de population).

USE world;
SELECT MAX(Population) AS 'Maximum Value'
FROM City
WHERE CountryCode = 'THA';

Résultat :

+---------------+
| Maximum Value |
+---------------+
|       6320174 |
+---------------+

La clause GROUP BY

Nous pouvons utiliser le GROUP BY clause pour répertorier chaque pays, ainsi que la population de la plus grande ville de ce pays (par population) :

USE world;
SELECT District, MAX(Population) AS 'Max Value'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District;

Résultat :

+-----------------+-----------+
| District        | Max Value |
+-----------------+-----------+
| New South Wales |   3276207 |
| Victoria        |   2865329 |
| Queensland      |   1291117 |
| 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, MAX(Population) AS 'Max Value'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District
ORDER BY `Max Value` ASC;

Résultat :

+-----------------+-----------+
| District        | Max Value |
+-----------------+-----------+
| Tasmania        |    126118 |
| Capital Region  |    322723 |
| South Australia |    978100 |
| West Australia  |   1096829 |
| Queensland      |   1291117 |
| Victoria        |   2865329 |
| New South Wales |   3276207 |
+-----------------+-----------+

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 multi-mots (comme `Max Value` ), vous devez utiliser le caractère backtick (` ) au lieu de l'apostrophe (' ) pour entourer les deux mots.

Trouvez la longueur maximale des caractères

Le MAX() La fonction n'est pas limitée aux seules colonnes avec des données numériques. Vous pouvez également combiner MAX() avec d'autres fonctions pour renvoyer des valeurs maximales dans d'autres domaines.

Par exemple, en utilisant nos exemples de données, nous pouvons trouver la valeur avec le nombre maximum de caractères dans la City colonne :

SELECT MAX(CHAR_LENGTH(Name)) AS 'Maximum Character Length'
FROM city;

Résultat :

+--------------------------+
| Maximum Character Length |
+--------------------------+
|                       34 |
+--------------------------+

Nous pouvons également le voir en utilisant la requête suivante (qui n'implique pas le MAX() fonction):

SELECT Name, CHAR_LENGTH(Name) AS 'Character Length'
FROM city
ORDER BY `Character Length` DESC
LIMIT 10;

Résultat :

+--------------------------------------+------------------+
| Name                                 | Character Length |
+--------------------------------------+------------------+
| Luxembourg [Luxemburg/Lëtzebuerg]   |               34 |
| Castellón de la Plana [Castell      |               31 |
| San Fernando del Valle de Cata       |               30 |
| Santo Domingo de los Colorados       |               30 |
| Thiruvananthapuram (Trivandrum       |               30 |
| [San Cristóbal de] la Laguna        |               29 |
| Ingraj Bazar (English Bazar)         |               28 |
| Soledad de Graciano Sánchez         |               28 |
| Valle de Chalco Solidaridad          |               27 |
| Machilipatnam (Masulipatam)          |               27 |
+--------------------------------------+------------------+

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',
    MAX(Population) OVER(PARTITION BY District) AS 'District Max'
FROM City
WHERE CountryCode = 'AUS'
ORDER BY `District Max` DESC;

Résultat :

+-----------------+---------------+-----------------+--------------+
| District        | City          | City Population | District Max |
+-----------------+---------------+-----------------+--------------+
| New South Wales | Sydney        |         3276207 |      3276207 |
| New South Wales | Wollongong    |          219761 |      3276207 |
| New South Wales | Newcastle     |          270324 |      3276207 |
| New South Wales | Central Coast |          227657 |      3276207 |
| Victoria        | Melbourne     |         2865329 |      2865329 |
| Victoria        | Geelong       |          125382 |      2865329 |
| Queensland      | Townsville    |          109914 |      1291117 |
| Queensland      | Brisbane      |         1291117 |      1291117 |
| Queensland      | Cairns        |           92273 |      1291117 |
| Queensland      | Gold Coast    |          311932 |      1291117 |
| West Australia  | Perth         |         1096829 |      1096829 |
| South Australia | Adelaide      |          978100 |       978100 |
| Capital Region  | Canberra      |          322723 |       322723 |
| Tasmania        | Hobart        |          126118 |       126118 |
+-----------------+---------------+-----------------+--------------+

Cet exemple partitionne les lignes par District , fournissant la valeur maximale 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 grande ville du même district.