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

MIN () - Encuentra el valor mínimo en una columna en MySQL

El MySQL MIN() La función es una función agregada que devuelve el valor mínimo 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ínimo de las filas devueltas. Si no hay filas coincidentes, MIN() devuelve NULL .

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

Sintaxis

La sintaxis de MIN() va así:

MIN([DISTINCT] expr) [over_clause]

Donde expr es la expresión para la que desea el valor mínimo.

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 MIN() función para encontrar la ciudad con la población más pequeña (es decir, la fila con el valor más pequeño en su columna de población).

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

Resultado:

+---------------+
| Minimum Value |
+---------------+
|         94100 |
+---------------+

La cláusula GROUP BY

Podemos usar el GROUP BY cláusula para enumerar cada distrito, junto con la población de la ciudad más pequeña de ese distrito (por población):

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

Resultado:

+-----------------+---------------+
| District        | Minimum Value |
+-----------------+---------------+
| New South Wales |        219761 |
| Victoria        |        125382 |
| Queensland      |         92273 |
| 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, MIN(Population) AS 'Minimum Value'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District
ORDER BY `Minimum Value` ASC;

Resultado:

+-----------------+---------------+
| District        | Minimum Value |
+-----------------+---------------+
| Queensland      |         92273 |
| Victoria        |        125382 |
| Tasmania        |        126118 |
| New South Wales |        219761 |
| Capital Region  |        322723 |
| South Australia |        978100 |
| West Australia  |       1096829 |
+-----------------+---------------+

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 `Minimum Value` ), debe usar el carácter de acento grave (` ) en lugar del apóstrofe (' ) para rodear las dos palabras.

Encuentre la longitud mínima de caracteres

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

Por ejemplo, usando nuestros datos de muestra, podemos encontrar el valor con la cantidad mínima de caracteres en la City columna:

SELECT MIN(CHAR_LENGTH(Name)) AS 'Minimum Character Length'
FROM city;

Resultado:

+--------------------------+
| Minimum Character Length |
+--------------------------+
|                        3 |
+--------------------------+

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

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

Resultado:

+------+------------------+
| Name | Character Length |
+------+------------------+
| Ome  |                3 |
| Yao  |                3 |
| Qom  |                3 |
| Itu  |                3 |
| Tsu  |                3 |
| Ube  |                3 |
| Ise  |                3 |
| Uji  |                3 |
| Ede  |                3 |
| Ota  |                3 |
+------+------------------+

Dado que varias ciudades tienen la misma longitud de caracteres, podemos ajustar esta consulta para que devuelva solo los valores distintos:

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

Resultado:

+------------------+
| Character Length |
+------------------+
|                3 |
|                4 |
|                5 |
|                6 |
|                7 |
|                8 |
|                9 |
|               10 |
|               11 |
|               12 |
+------------------+

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

Resultado:

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

Este ejemplo divide las filas por District , proporcionando el valor mínimo 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 pequeña (por población) en el mismo distrito.