sql >> Base de Datos >  >> RDS >> Database

Aprenda análisis básico de datos con funciones de ventana SQL

Este artículo trata sobre las funciones de ventana de T-SQL (Transact-SQL) y su uso básico en las tareas de análisis de datos del día a día.

Hay muchas alternativas a T-SQL cuando se trata de análisis de datos. Sin embargo, cuando se consideran las mejoras a lo largo del tiempo y la introducción de funciones de Windows, T-SQL es capaz de realizar análisis de datos en un nivel básico y, en algunos casos, incluso más allá.

Acerca de las funciones de la ventana SQL

Primero, primero familiaricémonos con las funciones de SQL Window en el contexto de la documentación de Microsoft.

Definición de Microsoft

Una función de ventana calcula un valor para cada fila de la ventana.

Definición sencilla

Una función de ventana nos ayuda a centrarnos en una parte particular (ventana) del conjunto de resultados para que podamos realizar análisis de datos solo en esa parte específica (ventana), en lugar de en todo el conjunto de resultados.

En otras palabras, las funciones de la ventana SQL convierten un conjunto de resultados en varios conjuntos más pequeños para fines de análisis de datos.

¿Qué es un conjunto de resultados?

En pocas palabras, un conjunto de resultados consta de todos los registros recuperados al ejecutar una consulta SQL.

Por ejemplo, podemos crear una tabla llamada Producto e inserte los siguientes datos en él:

-- (1) Create the Product table
CREATE TABLE [dbo].[Product]
(
	[ProductId] INT NOT NULL PRIMARY KEY,
	[Name] VARCHAR(40) NOT NULL,
	[Region] VARCHAR(40) NOT NULL
)

-- (2) Populate the Product table
INSERT INTO Product
(ProductId,Name,Region)
VALUES
(1,'Laptop','UK'),(2,'PC','UAE'),(3,'iPad','UK')

Ahora, el conjunto de resultados obtenido mediante el siguiente script contendrá todas las filas del Producto tabla:

-- (3) Result set
SELECT [ProductId], [Name],[Region] FROM Product

Qué es una ventana

Es importante comprender primero el concepto de ventana en relación con las funciones de ventana de SQL. En este contexto, una ventana es solo una forma de reducir su alcance apuntando a una parte específica del conjunto de resultados (como ya mencionamos anteriormente).

Quizás se esté preguntando ahora:¿qué significa realmente "apuntar a una parte específica del conjunto de resultados"?

Volviendo al ejemplo que vimos, podemos crear una ventana SQL basada en la región del producto dividiendo el conjunto de resultados en dos ventanas.

Comprender Row_Number()

Para continuar, necesitaremos usar la función Row_Number() que proporciona temporalmente un número de secuencia a las filas de salida.

Por ejemplo, si queremos agregar números de fila al conjunto de resultados en función de ProductID, necesitaremos usar ROW_NUMBER() para pedirlo por ID de producto de la siguiente manera:

--Using the row_number() function to order the result set by ProductID
SELECT ProductID,ROW_NUMBER() OVER (ORDER BY ProductID) AS SrNo,Name,Region FROM Product

Ahora, si queremos la función Row_Number() para ordenar el conjunto de resultados por ProductID descendente, luego la secuencia de filas de salida basada en ProductID cambiará de la siguiente manera:

--Using the row_number() function to order the result set by ProductID descending
SELECT ProductID,ROW_NUMBER() OVER (ORDER BY ProductID DESC) AS SrNo,Name,Region FROM Product

Todavía no hay ventanas SQL ya que lo único que hemos hecho es ordenar el conjunto por criterios específicos. Como se discutió anteriormente, la creación de ventanas significa dividir el conjunto de resultados en varios conjuntos más pequeños para analizar cada uno de ellos por separado.

Crear una ventana con Row_Number()

Para crear una ventana SQL en nuestro conjunto de resultados, necesitaremos particionarlo según cualquiera de las columnas que contiene.

Ahora podemos dividir el conjunto de resultados por región de la siguiente manera:

--Creating a SQL window based on Region
SELECT ROW_NUMBER() OVER (Partition by region ORDER BY Region) as Region_Serial_Number
, Name, Region FROM dbo.Product

Seleccionar - Cláusula superior

En otras palabras, Seleccionar con el Acabado allana el camino para las funciones de ventana de SQL al dividir un conjunto de resultados en ventanas más pequeñas.

Según la documentación de Microsoft, Seleccionar con el Over La cláusula define una ventana que luego puede ser utilizada por cualquier función de ventana.

Ahora, creemos una tabla llamada KitchenProduct de la siguiente manera:

CREATE TABLE [dbo].[KitchenProduct]
(
	[KitchenProductId] INT NOT NULL PRIMARY KEY IDENTITY(1,1),
	[Name] VARCHAR(40) NOT NULL,
	[Country] VARCHAR(40) NOT NULL,
	[Quantity] INT NOT NULL,
	[Price] DECIMAL(10,2) NOT NULL
);
GO

INSERT INTO dbo.KitchenProduct
(Name, Country, Quantity, Price)
VALUES
('Kettle','Germany',10,15.00)
,('Kettle','UK',20,12.00)
,('Toaster', 'France',10,10.00)
,('Toaster','UAE',10,12.00)
,('Kitchen Clock','UK',50,20.00)
,('Kitchen Clock','UAE',35,15.00)

Ahora, veamos la tabla:

SELECT [KitchenProductId], [Name], [Country], [Quantity], [Price] FROM dbo.KitchenProduct

Si desea ver cada producto con su propio número de serie en lugar de un número basado en el ID de producto generalizado, deberá usar una función de ventana SQL para particionar el conjunto de resultados por producto de la siguiente manera:

-- Viewing each product in its own series
SELECT ROW_NUMBER() OVER (Partition by Name order by Name) Product_SrNo,Name,Country,Quantity
FROM dbo.KitchenProduct

Compatibilidad (Select – Over Clause)

Según la documentación de Microsoft , Select – Over Clause es compatible con las siguientes versiones de bases de datos SQL:

  1. SQL Server 2008 y posteriores
  2. Base de datos Azure SQL
  3. Almacén de datos Azure SQL
  4. Almacén de datos en paralelo

Sintaxis

SELECCIONAR - SOBRE (Partición por Ordenar por )

Tenga en cuenta que he simplificado la sintaxis para hacer i t fácil de entender; consulte el Documentación de Microsoft para ver la lleno sintaxis.

Requisitos previos

Este artículo está básicamente escrito para principiantes, pero todavía hay algunos requisitos previos que deben tenerse en cuenta.

Familiarizarse con T-SQL

Este artículo asume que los lectores tienen un conocimiento básico de T-SQL y son capaces de escribir y ejecutar scripts SQL básicos.

Configurar la tabla de ejemplo de Ventas

Este artículo requiere la siguiente tabla de muestra para que podamos ejecutar nuestros ejemplos de funciones de ventana SQL:

-- (1) Create the Sales sample table
CREATE TABLE [dbo].[Sales]
(
	[SalesId] INT NOT NULL IDENTITY(1,1), 
    [Product] VARCHAR(40) NOT NULL,
	[Date] DATETIME2,
	[Revenue] DECIMAL(10,2), 
    CONSTRAINT [PK_Sales] PRIMARY KEY ([SalesId])
);
GO

-- (2) Populating the Sales sample table
SET IDENTITY_INSERT [dbo].[Sales] ON
INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (1, N'Laptop', N'2017-01-01 00:00:00', CAST(200.00 AS Decimal(10, 2)))
INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (2, N'PC', N'2017-01-01 00:00:00', CAST(100.00 AS Decimal(10, 2)))
INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (3, N'Mobile Phone', N'2018-01-01 00:00:00', CAST(300.00 AS Decimal(10, 2)))
INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (4, N'Accessories', N'2018-01-01 00:00:00', CAST(150.00 AS Decimal(10, 2)))
INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (5, N'iPad', N'2019-01-01 00:00:00', CAST(300.00 AS Decimal(10, 2)))
INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (6, N'PC', N'2019-01-01 00:00:00', CAST(200.00 AS Decimal(10, 2)))
INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (7, N'Laptop', N'2019-01-01 00:00:00', CAST(300.00 AS Decimal(10, 2)))
SET IDENTITY_INSERT [dbo].[Sales] OFF

Vea todas las ventas ejecutando el siguiente script:

-- View sales
SELECT
  [SalesId],[Product],[Date],[Revenue]
FROM dbo.Sales

Agrupar por frente a funciones de ventana SQL

Uno puede preguntarse:¿cuál es la diferencia entre usar la cláusula Group By y las funciones de la ventana SQL?

Bueno, la respuesta está en los siguientes ejemplos.

Agrupar por ejemplo

Para ver las ventas totales por producto, podemos usar Agrupar por de la siguiente manera:

-- Total sales by product using Group By
SELECT
  Product
 ,SUM(REVENUE) AS Total_Sales
FROM dbo.Sales
GROUP BY Product
ORDER BY Product

Entonces, la cláusula Group By nos ayuda a ver las ventas totales. El valor total de las ventas es la suma de los ingresos de todos los productos similares en la misma fila sin utilizar la cláusula Agrupar por. ¿Qué pasa si estamos interesados ​​en ver los ingresos (ventas) de cada producto individual junto con las ventas totales?

Aquí es donde entran en acción las funciones de la ventana SQL.

Ejemplo de función de ventana SQL

Para ver el producto, los ingresos y los ingresos totales de todos los productos similares, tenemos que particionar los datos por productos usando OVER() de la siguiente manera:

-- Total sales by product using an SQL window function
SELECT
  Product
 ,REVENUE
 ,SUM(REVENUE) OVER (PARTITION BY PRODUCT) AS Total_Sales
FROM dbo.Sales

La salida debe ser la siguiente:

Entonces, ahora podemos ver fácilmente las ventas de cada producto individual junto con las ventas totales de ese producto. Por ejemplo, los ingresos de PC es 100,00 pero las ventas totales (suma de los ingresos de la PC producto) es 300,00 porque se vendían dos modelos de PC diferentes.

Análisis básico con las funciones de agregado

Las funciones agregadas devuelven un valor único después de realizar cálculos en un conjunto de datos.

En esta sección, vamos a explorar más a fondo las funciones de la ventana SQL, específicamente, usándolas junto con funciones agregadas para realizar análisis de datos básicos.

Funciones agregadas comunes

Las funciones agregadas más comunes son:

  1. Suma
  2. Contar
  3. Mínimo
  4. Máximo
  5. Promedio (promedio)

Análisis de datos agregados por producto

Para analizar el conjunto de resultados por subproductos con la ayuda de funciones agregadas, simplemente tenemos que usar una función agregada con una partición de subproductos dentro de la instrucción OVER():

-- Data analysis by product using aggregate functions
SELECT Product,Revenue
,SUM(REVENUE) OVER (PARTITION BY PRODUCT) as Total_Sales 
,MIN(REVENUE) OVER (PARTITION BY PRODUCT) as Minimum_Sales 
,MAX(REVENUE) OVER (PARTITION BY PRODUCT) as Maximum_Sales 
,AVG(REVENUE) OVER (PARTITION BY PRODUCT) as Average_Sales 
FROM dbo.Sales

Si echa un vistazo más de cerca a la PC o Ordenador portátil productos, verá cómo las funciones agregadas funcionan juntas junto con la función de ventana SQL.

En el ejemplo anterior, podemos ver que el valor de Ingresos para PC es 100,00 la primera vez y 200,00 la próxima vez, pero las ventas totales ascienden a 300,00. La información similar se puede ver para el resto de las funciones agregadas.

Análisis de datos agregados por fecha

Ahora, realicemos algunos análisis de datos de los productos por fecha usando funciones de ventana SQL en combinación con funciones agregadas.

Esta vez, dividiremos el conjunto de resultados por fecha en lugar de por producto de la siguiente manera:

-- Data analysis by date using aggregate functions
SELECT Product,date,Revenue
,SUM(REVENUE) OVER (PARTITION BY DATE) as Total_Sales 
,MIN(REVENUE) OVER (PARTITION BY DATE) as Minimum_Sales 
,MAX(REVENUE) OVER (PARTITION BY DATE) as Maximum_Sales 
,AVG(REVENUE) OVER (PARTITION BY DATE) as Average_Sales 
FROM dbo.Sales

Con esto, hemos aprendido técnicas básicas de análisis de datos utilizando el enfoque de funciones de ventana SQL.

Cosas que hacer

Ahora que está familiarizado con las funciones de la ventana SQL, intente lo siguiente:

  1. Teniendo en cuenta los ejemplos que vimos, realice un análisis de datos básico utilizando funciones de ventana SQL en la base de datos de muestra mencionada en este artículo.
  2. Agregue una columna de Cliente a la tabla de muestra de Ventas y vea qué tan rico puede volverse su análisis de datos cuando se le agrega otra columna (cliente).
  3. Agregar una columna Región a la tabla de muestra Ventas y realizar análisis de datos básicos usando funciones agregadas por región.