sql >> Base de Datos >  >> RDS >> Mysql

MAX () - Encuentra el valor máximo en una columna en MySQL

El MySQL MAX() La función es una función agregada que devuelve el valor máximo de una expresión.

Normalmente, la expresión sería un rango de valores devueltos como filas separadas en una columna, y puede usar esta función para encontrar el valor máximo de las filas devueltas. Si no hay filas coincidentes, MAX() devuelve NULL .

Por ejemplo, puede usar esta función para averiguar qué ciudad tiene la mayor población de una lista de ciudades.

Sintaxis

La sintaxis de MAX() va así:

MAX([DISTINCT] expr) [over_clause]

Donde expr es la expresión para la que desea el valor máximo.

La over_clause es una cláusula opcional que funciona con funciones de ventana. Tenga en cuenta que la over_clause solo se puede usar si no usa el DISTINCT palabra clave.

El (opcional) DISTINCT La palabra clave se puede utilizar para eliminar valores duplicados.

Ejemplo básico

Primero, aquí están los datos sin procesar que usaremos en este ejemplo:

USE world;
SELECT Name, Population
FROM City
WHERE CountryCode = 'THA';

Resultado:

+-------------------+------------+
| 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 |
+-------------------+------------+

Podemos usar el MAX() función para encontrar la ciudad con la población más grande (es decir, la fila con el valor máximo en su columna de población).

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

Resultado:

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

La cláusula GROUP BY

Podemos usar el GROUP BY cláusula para enumerar cada país, junto con la población de la ciudad más grande de ese país (por población):

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

Resultado:

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

La cláusula ORDEN POR

También podemos usar el ORDER BY cláusula para especificar una columna con la que ordenar por:

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

Resultado:

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

Esto ordena los resultados en orden ascendente, que enumera el valor mínimo primero.

Tenga en cuenta que, al ordenar por un alias de varias palabras (como `Max Value` ), debe usar el carácter de acento grave (` ) en lugar del apóstrofe (' ) para rodear las dos palabras.

Encuentre la longitud máxima de caracteres

El MAX() La función no se limita solo a columnas con datos numéricos. También puede combinar MAX() con otras funciones para devolver valores máximos en otras áreas.

Por ejemplo, utilizando nuestros datos de muestra, podemos encontrar el valor con el número máximo de caracteres en la City columna:

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

Resultado:

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

También podemos ver esto usando la siguiente consulta (que no involucra el MAX() función):

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

Resultado:

+--------------------------------------+------------------+
| 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 |
+--------------------------------------+------------------+

Uso de una cláusula OVER

Como se mencionó, la sintaxis permite un OVER cláusula a incluir en sus consultas. Básicamente, el OVER La cláusula le permite especificar cómo dividir las filas de consulta en grupos para que la función de ventana las procese.

He aquí un ejemplo:

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;

Resultado:

+-----------------+---------------+-----------------+--------------+
| 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 |
+-----------------+---------------+-----------------+--------------+

Este ejemplo divide las filas por District , proporcionando el valor máximo para cada partición (distrito). Esto le permite ver datos más granulares, como la población de cada ciudad, junto con la población de la ciudad más grande en el mismo distrito.