Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Funções agregadas MIN e MAX no SQL Server

Funções do SQL Server


Nos sistemas de banco de dados em geral e no SQL Server em particular, as funções são pedaços de código que recebem zero ou uma entrada e retornam uma única saída ou um array.

As funções com valor de tabela que normalmente são definidas pelo usuário podem retornar uma matriz, mas as funções internas do SQL Server geralmente são funções com valor escalar. A terceira classe de funções no SQL Server são funções de valor agregado. As funções MIN e MAX do SQL Server são funções de valor agregado.

As funções de janela são uma classe relativamente nova. Eles realizam cálculos como funções agregadas, mas o fazem em um conjunto de linhas relacionadas à linha atual. Enquanto uma função de agregação provavelmente produzirá um único resultado trabalhando em uma coluna, uma função de janela provavelmente produzirá um resultado para cada linha.

A classificação do SQL Server Functions também pode se basear no tipo de dados – Funções de String, Funções Numéricas e Funções de Data. Podemos deduzir que as funções de string operam em valores de string, por exemplo, LENGTH().

MÍN. e MÁX.


As funções MIN e MAX são funções agregadas muito simples. Ainda assim, eles podem responder a uma ampla variedade de perguntas, dependendo do conjunto de dados com o qual estamos lidando.

Por exemplo, quando emitimos a instrução SELECT, estamos fazendo uma pergunta ao SQL Server . Portanto, dizemos que estamos executando uma consulta . Para perguntar ao SQL Server sobre os valores mínimo e máximo em uma coluna, usamos a seguinte sintaxe:
SELECT MIN(column_name) FROM table_name;
SELECT MAX(column_name) FROM table_name;

Quando usamos essa sintaxe, o SQL Server retorna um único valor. Assim, podemos considerar as funções MIN() e MAX() Funções de Valor Escalar.

A Listagem 1 exibe a instrução simples para derivar os valores mínimo e máximo do peso do frete de Sales.Orders tabela do TSQLV4 de Itzik Bengan base de dados:
-- Listing 1: Basic MIN() and MAX() Function Queries
USE TSQLV4
GO
SELECT * FROM [Sales].[Orders];

-- Without Column Aliases
SELECT MIN(freight) FROM [Sales].[Orders];
SELECT MAX(freight) FROM [Sales].[Orders];
-- Without Column Aliases
SELECT MIN(freight) min_freight FROM [Sales].[Orders];
SELECT MAX(freight) max_freight FROM [Sales].[Orders];

GRUPAR POR


"Quais são os pesos de frete mínimo e máximo por país?" Para responder a esta pergunta, precisamos do GROUP BY cláusula. O exemplo está na Listagem 2 abaixo.

A consulta primeiro agrupa os dados por shipcountry, e, em seguida, retorna os pesos de frete mínimo e máximo, respectivamente, por país. Podemos confirmar isso emitindo a última consulta da listagem (validação).
-- Listing 2: MIN and MAX Freight By Country
-- Minimum by Country
SELECT shipcountry, MIN(freight) min_freight FROM [Sales].[Orders]
GROUP BY shipcountry;

-- Maximum by Country
SELECT shipcountry, MAX(freight) max_freight FROM [Sales].[Orders]
GROUP BY shipcountry;

-- Validation
SELECT * FROM [Sales].[Orders] WHERE shipcountry='Finland'
ORDER BY freight;

-- Listing 2: MIN and MAX Freight by Country
-- Minimum by Customer
SELECT custid, MIN(freight) min_freight FROM [Sales].[Orders]
GROUP BY custid;

-- Maximum by Customer
SELECT custid, MAX(freight) max_freight FROM [Sales].[Orders]
GROUP BY custid;


-- Validation
SELECT * FROM [Sales].[Orders] WHERE custid='23'
ORDER BY freight;

A Figura 3 mostra os resultados. Podemos fazer algo semelhante com outra coluna – a custid coluna. Nesse caso, estamos respondendo à pergunta:“Qual é o susto mínimo e máximo para cada cliente?”

Mais perguntas


Podemos investigar ainda mais os dados para descobrir quais países têm pesos de frete menores que 1 ou maiores que 800. Fazemos isso usando o HAVING cláusula que filtra os conjuntos de resultados segmentados em grupos pelo GROUP BY cláusula.
-- Listing 3: Introducing the HAVING Clause
SELECT shipcountry, MIN(freight) min_freight FROM [Sales].[Orders]
GROUP BY shipcountry
HAVING MIN(freight)<1;

SELECT shipcountry, MAX(freight) max_freight FROM [Sales].[Orders]
GROUP BY shipcountry
HAVING MAX(freight)>800;

Trabalhando com datas


Ao aplicar as funções MIN() e MAX() a datas, esperamos ver o mais cedo e mais recente datas respectivamente. Dê uma olhada nos exemplos – as datas são armazenadas como números inteiros internamente no SQL Server.
-- Listing 4: Working with Dates
SELECT MIN(orderdate) earliest_date FROM [Sales].[Orders];
SELECT MAX(orderdate) latest_date FROM [Sales].[Orders];

Podemos ir mais fundo perguntando qual cliente fez o primeiro pedido e qual cliente fez o pedido mais recente. Para isso, estamos usando o código da Listagem 5. A Figura 6 mostra que o custid 85 clientes realizaram o pedido mais antigo, enquanto o custid 9 clientes fizeram o pedido mais recente.
-- Listing 5: Customer Order Dates
SELECT custid, MIN(orderdate) earliest_date FROM [Sales].[Orders]
GROUP BY custid
ORDER BY earliest_date;

SELECT custid, MAX(orderdate) latest_date FROM [Sales].[Orders]
GROUP BY custid
ORDER BY latest_date desc;

Conclusão


Neste artigo, demonstramos brevemente o uso das funções agregadas MIN() e MAX() no SQL Server. O papel dessas funções é retornar os valores mínimo e máximo para um determinado intervalo armazenado em uma coluna da tabela.

Podemos responder a mais perguntas com essas funções combinando-as com outros comandos T-SQL, como as cláusulas GROUP BY, ORDER BY e HAVING.

Muitas ferramentas simplificam e aceleram esse desempenho de tarefas, e você pode escolher qualquer solução que atenda às suas necessidades. Entre eles, o SQL Complete da Devart faz todas as manipulações necessárias e fornece um recurso SSMS Grid Aggregate no local que calcula MIN, MAX e AVG dos valores selecionados na grade.