20th Jul 2022 9 minutos de leitura Funções SQL MIN e MAX Explicadas em 6 Exemplos Dorota Wdzięczna sql aprender sql min max Índice Qual é a função MIN() em SQL? Qual é a função MAX() em SQL? A amostra de dados Exemplos de casos de uso de MIN() e MAX() 1. Usando MIN() ou MAX() como uma única coluna 2. Usando MIN() e MAX() com Outras Colunas 3. Usando MIN() e MAX() na mesma consulta 4. Usando MIN() ou MAX() na Cláusula HAVING 5. Usando MIN() ou MAX() em uma função de janela simples 6. Usando MIN/MAX em uma Função de Janela Particionada O que aprendemos sobre as funções MIN() e MAX() da SQL O que são as funções SQL MIN() e MAX()? Quando você deve usá-las como funções agregadas, e quando deve usá-las com funções de janela? Explicamos usando exemplos práticos. É difícil imaginar SQL sem as funções agregadas MIN() e MAX(). Elas são muito úteis entre muitos profissionais de dados porque nos permitem resolver muitos problemas de negócios. Neste artigo, vou explicar o que cada função faz e discutir vários casos de uso. Vamos começar. Qual é a função MIN() em SQL? O padrão SQL é suportado pela maioria dos motores de banco de dados relacionais e inclui várias funções agregadas. Estas funções agregadas computam cálculos sobre dados numéricos. Um Guia para Iniciantes em Funções Agregadas SQL discute todas elas em detalhes; este artigo enfoca apenas duas destas funções: MIN() e MAX(). Primeiro, vamos falar sobre a função MIN(). Ela retorna o menor valor em um conjunto de valores. Os valores podem vir de uma coluna numérica ou como resultado de uma expressão que retorna um valor numérico. (Nota: A coluna pode vir de uma tabela ou de uma vista.) É uma função escalar que retorna um valor numérico. A sintaxe da função MIN() é apresentada abaixo: MIN(column_or_expression) Como você vê, esta função leva um argumento - uma coluna ou uma expressão com valores numéricos. É importante que os valores sejam numéricos, pois a função encontra o valor mínimo entre eles. Por exemplo, a partir deste conjunto de valores ... 4, 5, 8, 2, 14 ... MIN() retorna 2. Qual é a função MAX() em SQL? Como MIN(), MAX() é uma função agregada que retorna um valor numérico a partir de um conjunto. A diferença é que ela retorna o maior valor (máximo). Os valores podem vir de uma coluna ou como o resultado de uma expressão que retorna um valor ou valores numéricos. É uma função escalar que retorna um valor. Aqui está a sintaxe da função MAX(): MAX(column_or_expression) A partir deste conjunto de valores ... 4, 5, 8, 2, 14 ... MAX() retorna 14. A amostra de dados Antes de começarmos a analisar os casos de uso MIN() e MAX(), vejamos os dados que estaremos usando na tabela cosmetics: idnamecategorydelivered_yearprice 1shampoohair202011 2night creamface202012 3cleanserface20205 4brushhair20203 5mascaraeye20218 6eyebroweye202115 7conditionerhair202121 8sprayhair202113 9eyelinereye202120 10tonicface202021 11face maskface202110 12eye creameye202122 13hair maskhair20203 Esta tabela armazena informações sobre produtos cosméticos em três categorias (a coluna category): cabelo, rosto e olhos. Os nomes dos produtos estão no nome da coluna. As duas últimas colunas apresentam dados sobre quando o produto foi entregue (delivered_year) e seu price. Há apenas dois anos (2020 e 2021) na coluna delivered_year. Se você precisar de ajuda com as instruções e funções SQL que usamos neste artigo, experimente a folha de trapaça SQL para Iniciantes . Exemplos de casos de uso de MIN() e MAX() 1. Usando MIN() ou MAX() como uma única coluna Funções agregadas como MIN() podem ser usadas como uma única coluna na consulta SELECT. Por exemplo: SELECT MIN(price) FROM cosmetics; Aqui está o resultado: min 3 Após a palavra-chave SELECT, colocamos MIN() e o nome da coluna (neste caso, price). A seguir é a palavra-chave FROM e o nome da tabela (cosmetics). O resultado é o menor valor da coluna price, que é 3. Você pode usar MAX() exatamente da mesma maneira para encontrar o preço mais alto do produto: SELECT MAX(price) FROM cosmetics; E aqui está o resultado: max 22 O preço máximo na tabela cosmetics é 22 (o preço do creme para os olhos). O artigo How to Find Minimum Values in Columns dá mais exemplos sobre como encontrar o valor mínimo. 2. Usando MIN() e MAX() com Outras Colunas Um uso mais avançado das funções MIN() ou MAX() é utilizá-las em grupos de filas. Aqui está outra pergunta: SELECT category, MAX(price) AS max_price FROM cosmetics GROUP BY category; Ela retorna os dados: categorymax_price hair21 face21 eye22 Primeiro é a palavra-chave SELECT com o nome da coluna (category), depois a função MAX() com a coluna price como argumento. Depois temos max_price, o pseudônimo da nova coluna criada por MAX(). A seguir é a palavra-chave FROM e o nome da tabela. No final, temos a cláusula GROUP BY com a coluna category. Isto determina os grupos (ou seja, os produtos são agrupados por categoria). Para cada grupo, obtemos seu maior valor - neste caso, o preço mais alto entre os produtos daquela categoria. Na categoria "olho", o preço mais alto é de US$ 22; nas categorias "rosto" e "cabelo", é de US$ 21. O artigo Como Encontrar Valores Máximos em Linhas lhe dá mais exemplos desta função. 3. Usando MIN() e MAX() na mesma consulta Você pode usar ambas as funções MIN e MAX em um SELECT. Se você usar somente estas funções sem colunas, não precisa de uma cláusula GROUP BY. A seguir, temos uma consulta que implementa ambas as funções: SELECT MIN(price) AS min_price, MAX(price) AS max_price FROM cosmetics; Esta consulta retorna os dados: min_pricemax_price 322 No SELECT, temos a função MIN() com o argumento da coluna price seguida de MAX() com o mesmo argumento e seus respectivos pseudônimos. Isto retorna o preço mínimo ($3) e máximo ($22) para todos os produtos da tabela. Naturalmente, você pode fazer o mesmo calculando o preço mínimo e máximo para cada categoria. Entretanto, aqui você precisará usar GROUP BY: SELECT category, MIN(price) AS min_price, MAX(price) AS max_price FROM cosmetics GROUP BY category; Aqui está o conjunto de resultados: categorymin_pricemax_price hair321 face521 eye822 Neste caso, o preço mínimo na categoria "cabelo" é $3 e o preço máximo é $21, enquanto na categoria "olho" o valor mais baixo é $8 e o mais alto é $22. Você pode saber mais sobre como encontrar o valor mínimo e máximo nos artigos Como encontrar o valor mínimo de uma coluna em SQL e Como encontrar o valor máximo de uma coluna numérica em SQL. 4. Usando MIN() ou MAX() na Cláusula HAVING Outra maneira de usar MIN() ou MAX() é filtrar linhas de acordo com o valor retornado por esta função - ou seja, na cláusula HAVING. A consulta abaixo implementa MIN() em HAVING: SELECT category, MAX(price) AS max_price FROM cosmetics GROUP BY category HAVING MIN(price)>4; O conjunto de resultados: categorymax_price face21 eye22 No site SELECT, temos a coluna category. A seguir, temos a função MAX() com price como argumento. Para cada categoria, calcularemos o preço máximo entre os produtos pertencentes a esta categoria. Depois FROM cosmetics vem a cláusula GROUP BY com a coluna category. No final da consulta é a cláusula HAVING com a função MIN(). Este encontrará o preço mais baixo entre os produtos de cada categoria; se este preço for inferior a 4, não será incluído nos resultados. Como o preço mínimo na categoria "cabelo" é de US$ 3, ele não foi exibido no conjunto de resultados. Note que o uso de qualquer uma das funções em HAVING não requer o uso (ou qualquer função agregada) em SELECT. 5. Usando MIN() ou MAX() em uma função de janela simples O uso mais avançado de MIN() ou MAX() está em uma função de janela. Se você não estiver familiarizado com funções de janela, leia o artigo Exemplos de funções de janela SQL com explicações. Aqui está uma simples função de janela que usa a função MIN(): SELECT name, price, category, delivered_year, MIN(price) OVER (ORDER BY category DESC) AS min_price FROM cosmetics; A primeira coisa que você pode notar é a lista de colunas SELECT: name, price, category, delivered_year. A seguir é a função agregada MIN(price), que encontra o valor mais baixo na coluna price. OVER é o que faz desta uma função de janela; ela define a janela. ou o conjunto de linhas dentro do conjunto de resultados da consulta. Isto nos permite calcular um valor agregado para cada linha na janela. Aqui, OVER é emparelhado com ORDER BY categoria DESC (ou seja, em ordem decrescente); assim, o preço mínimo é sempre $3, porque o preço mais baixo na categoria "cabelo" é $3, que é menor que o mínimo da categoria seguinte de $5. O resultado é o seguinte: namepricecategorydelivered_yearmin_price hair mask3hair20203 brush3hair20203 conditioner21hair20213 spray13hair20213 shampoo11hair20203 night cream12face20203 cleanser5face20203 tonic21face20203 face mask10face20213 mascara8eye20213 eye cream22eye20213 eyeliner20eye20213 eyebrow15eye20213 6. Usando MIN/MAX em uma Função de Janela Particionada A seguir, vamos usar MIN() ou MAX() em uma função de janela que tem a cláusula PARTITION BY. (Se você precisar de uma atualização em PARTITION BY, dê uma olhada na folha de consultas SQL Funções de Janela (Window Functions) em SQL .) Esta é a consulta: SELECT name, price, category, delivered_year, MIN(price) OVER (PARTITION BY delivered_year ORDER BY category DESC) AS min_price FROM cosmetics; Esta consulta calcula o preço mínimo para cada partição com base na coluna delivered_year e ordena as linhas por categoria. Ela retorna o seguinte conjunto de resultados: namepricecategorydelivered_yearmin_price shampoo11hair20203 brush3hair20203 hair mask3hair20203 tonic21face20203 night cream12face20203 cleanser5face20203 spray13hair202113 conditioner21hair202113 face mask10face202110 eyeliner20eye20218 mascara8eye20218 eyebrow15eye20218 eye cream22eye20218 Estes resultados contêm a lista de cosméticos, incluindo seu nome, preço, categoria e o ano de entrega. Cada linha também contém o preço mínimo para esse ano de entrega (que é a partição). Em cada divisória, as linhas são ordenadas em ordem decrescente por categoria. Neste caso, a cláusula OVER contém as cláusulas ORDER BY e PARTITION BY. PARTITION BY delivered_year denota que o preço mínimo é calculado separadamente para cada ano. Os registros em cada partição (o ano em que os produtos foram entregues) são classificados por categoria em ordem decrescente (ORDER BY categoria DESC). O que aprendemos sobre as funções MIN() e MAX() da SQL As funções agregadas do SQL MIN() e MAX() são muito populares. Neste artigo, eu expliquei como utilizá-las em vários casos. A principal diferença entre elas é que MIN() encontra o valor mínimo em um conjunto de valores, enquanto MAX() retorna o valor máximo. Agora que você sabe como usar MIN() e MAX(), você está pronto para isso: Encontrar os maiores/pequenos valores entre todas as linhas ou grupos de linhas dadas. Comparar os valores mínimo e máximo com outras linhas. Use estas funções em divisórias e em funções de janela simples. Para mais informações sobre as diferenças entre valores agregados e funções de janela, tente nosso artigo SQL Funções de Janela (Window Functions) em SQL vs. Funções Agregadas SQL: Semelhanças e diferenças. Se você é um iniciante e gostaria de expandir seus conhecimentos de SQL, recomendo LearnSQL.com.br's SQL para Iniciantes curso. Mas se você já está familiarizado com SQL básico, você pode querer fazer o nosso Funções de Janela (Window Functions) em SQL curso para elevar o nível de suas habilidades. Tags: sql aprender sql min max