Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MIN() – Encontre o valor mínimo em uma coluna no MySQL


O MySQL MIN() function é uma função agregada que retorna o valor mínimo de uma expressão.

Normalmente, a expressão seria um intervalo de valores retornados como linhas separadas em uma coluna, e você pode usar essa função para localizar o valor mínimo das linhas retornadas. Se não houver linhas correspondentes, MIN() retorna NULL .

Por exemplo, você pode usar esta função para descobrir qual cidade tem a menor população de uma lista de cidades.


Sintaxe


A sintaxe de MIN() fica assim:
MIN([DISTINCT] expr) [over_clause]

Onde expr é a expressão para a qual você deseja o valor mínimo.

over_clause é uma cláusula opcional que funciona com funções de janela. Observe que a over_clause só pode ser usado se você não usar o DISTINCT palavra-chave.

O (opcional) DISTINCT palavra-chave pode ser usada para eliminar valores duplicados.

Exemplo básico


Primeiro, aqui estão os dados brutos que usaremos neste exemplo:
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 o MIN() função para encontrar a cidade com a menor população (ou seja, a linha com o menor valor em sua coluna de população).
USE world;
SELECT MIN(Population) AS 'Minimum Value'
FROM City
WHERE CountryCode = 'THA';

Resultado:
+---------------+
| Minimum Value |
+---------------+
|         94100 |
+---------------+

A Cláusula GROUP BY


Podemos usar o GROUP BY cláusula para listar cada distrito, juntamente com a população da menor cidade desse distrito (por população):
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 |
+-----------------+---------------+

A Cláusula ORDER BY


Também podemos usar o ORDER BY cláusula para especificar uma coluna com a qual 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 |
+-----------------+---------------+

Isso ordena os resultados em ordem crescente, que lista primeiro o valor mínimo.

Observe que, ao ordenar por um alias de várias palavras (como `Minimum Value` ), você precisa usar o caractere de acento grave (` ) em vez do apóstrofo (' ) para cercar as duas palavras.

Encontre o comprimento mínimo de caracteres


O MIN() A função não se limita apenas a colunas com dados numéricos. Você também pode combinar MIN() com outras funções para retornar valores mínimos em outras áreas.

Por exemplo, usando nossos dados de exemplo, podemos encontrar o valor com o número mínimo de caracteres na City coluna:
SELECT MIN(CHAR_LENGTH(Name)) AS 'Minimum Character Length'
FROM city;

Resultado:
+--------------------------+
| Minimum Character Length |
+--------------------------+
|                        3 |
+--------------------------+

Também podemos ver isso usando a seguinte consulta (que não envolve o MIN() função):
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 |
+------+------------------+

Visto que várias cidades têm o mesmo comprimento de caracteres, podemos ajustar esta consulta para retornar apenas os 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 |
+------------------+

Usando uma cláusula OVER


Como mencionado, a sintaxe permite um OVER cláusula a ser incluída em suas consultas. Basicamente, o OVER A cláusula permite especificar como particionar linhas de consulta em grupos para processamento pela função de janela.

Aqui está um exemplo:
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 exemplo particiona as linhas por District , fornecendo o valor mínimo para cada partição (distrito). Isso permite que você veja dados mais granulares, como a população de cada cidade, juntamente com a população da menor cidade (por população) no mesmo distrito.