sql >> Base de Datos >  >> RDS >> Sqlserver

Funciones agregadas MIN y MAX en SQL Server

Funciones del servidor SQL

En los sistemas de bases de datos en general y en SQL Server en particular, las funciones son fragmentos de código que toman cero o una entrada y devuelven una sola salida o una matriz.

Las funciones con valores de tabla que normalmente están definidas por el usuario pueden devolver una matriz, pero las funciones de SQL Server integradas suelen ser funciones con valores escalares. La tercera clase de funciones en SQL Server son funciones de valor agregado. Las funciones MIN y MAX de SQL Server son funciones de valor agregado.

Las funciones de ventana son una clase relativamente nueva. Realizan cálculos como funciones agregadas, pero lo hacen sobre un conjunto de filas relacionadas con la fila actual. Si bien es probable que una función agregada arroje un solo resultado al trabajar en una columna, es más probable que una función de ventana arroje un resultado para cada fila.

La clasificación de funciones de SQL Server también puede basarse en el tipo de datos:funciones de cadena, funciones numéricas y funciones de fecha. Podemos deducir que las funciones de cadena operan en valores de cadena, por ejemplo, LENGTH().

MÍN. Y MÁX.

Las funciones MIN y MAX son funciones agregadas muy simples. Aún así, pueden responder una amplia variedad de preguntas según el conjunto de datos con el que estemos tratando.

Por ejemplo, cuando emitimos la instrucción SELECT, le hacemos una pregunta a SQL Server. . Por lo tanto, decimos que estamos ejecutando una consulta . Para preguntarle a SQL Server sobre los valores mínimo y máximo en una columna, usamos la siguiente sintaxis:

SELECT MIN(column_name) FROM table_name;
SELECT MAX(column_name) FROM table_name;

Cuando usamos esta sintaxis, SQL Server devuelve un solo valor. Por lo tanto, podemos considerar las funciones MIN() y MAX() funciones escalares.

El Listado 1 muestra la declaración simple para derivar los valores mínimo y máximo del peso de la carga de Sales.Orders tabla de Itzik Bengan’s TSQLV4 base de datos:

-- 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];

AGRUPAR POR

“¿Cuáles son los pesos de carga mínimos y máximos por país?” Para responder a esta pregunta, necesitamos el GROUP BY cláusula. El ejemplo se encuentra en el Listado 2 a continuación.

La consulta primero agrupa los datos por shipcountry, y luego devuelve los pesos de carga mínimo y máximo respectivamente por país. Podemos confirmar esto emitiendo la última consulta en el listado (validación).

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

La figura 3 muestra los resultados. Podemos hacer algo similar con otra columna:el custid columna. En este caso, respondemos a la pregunta “¿Cuál es el susto mínimo y máximo para cada cliente?”

Más preguntas

Podemos probar los datos más a fondo para averiguar qué países tienen pesos de carga inferiores a 1 o superiores a 800. Para ello, utilizamos la función HAVING. cláusula que filtra conjuntos de resultados segmentados en grupos por 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;

Trabajar con fechas

Al aplicar las funciones MIN() y MAX() a las fechas, esperamos ver la primera y último fechas respectivamente. Eche un vistazo a los ejemplos:las fechas se almacenan como números enteros internamente en SQL Server.

-- Listing 4: Working with Dates
SELECT MIN(orderdate) earliest_date FROM [Sales].[Orders];
SELECT MAX(orderdate) latest_date FROM [Sales].[Orders];

Podemos profundizar más preguntando qué cliente hizo el primer pedido y qué cliente hizo el pedido más reciente. Para eso, estamos usando el código del Listado 5. La Figura 6 muestra que el custid 85 cliente realizó el primer pedido, mientras que el custid 9 clientes realizaron el último pedido.

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

Conclusión

En este artículo, demostramos brevemente el uso de las funciones agregadas MIN() y MAX() en SQL Server. El rol de estas funciones es devolver los valores mínimo y máximo para un rango dado almacenado en una columna de tabla.

Podemos responder más preguntas con estas funciones combinándolas con otros comandos T-SQL como las cláusulas GROUP BY, ORDER BY y HAVING.

Muchas herramientas simplifican y aceleran el desempeño de dichas tareas, y puede elegir cualquier solución que cumpla con sus requisitos. Entre ellos, SQL Complete de Devart realiza todas las manipulaciones necesarias y proporciona una característica SSMS Grid Aggregate in situ que calcula MIN, MAX y AVG de los valores seleccionados en la cuadrícula.