21st Jul 2022 Lectura de 9 minutos 7 situaciones de la vida real en las que se necesita un total acumulado y cómo calcularlo en SQL Marija Ilic SQL aprender SQL running total Índice Definición de Total Móvil Cálculo del total acumulado en SQL Ejemplos de totales corridos 1. Seguimiento de las cuotas planificadas frente a las realizadas 2. Cálculo de saldos 3. Operaciones de caja 4. Contar la ingesta diaria de calorías 5. Casos confirmados de COVID-19 6. Usuarios registrados de una aplicación móvil 7. Programas de fidelización de líneas aéreas Resumen ¿Quieres aprender qué es un total acumulado y cómo calcularlo en SQL? En este artículo, describiré diferentes escenarios de negocio en los que se necesita un total acumulado. También te enseñaré cómo calcular un total acumulado en SQL con la ayuda de las funciones de ventana. ¿Preparado? Vamos allá. Definición de Total Móvil Un total acumulado es la suma acumulada de un valor y todos los valores anteriores de la columna. Por ejemplo, imagina que estás en ventas y almacenas información sobre el número de artículos vendidos en un día concreto. Podría querer calcular un total acumulado, el número total de artículos vendidos hasta una fecha determinada. A continuación se muestra una tabla con el número de artículos vendidos en un día concreto: dateno_of_itemsrunning_total 2021-01-0110150 2021-01-021222 2021-01-031537 2021-01-04946 2021-01-052066 2021-01-061581 2021-01-071394 2021-01-0817111 2021-01-0921132 2021-01-1019151 2021-01-1116167 2021-01-1213180 Número de artículos vendidos y total acumulado La tercera columna es el total calculado. Tenga en cuenta que el valor de la fila actual siempre se incluye en el total acumulado. Por ejemplo, el 5 de enero de 2021, el total acumulado es 66. Este es el número total de artículos vendidos desde el 01 Ene 2021 hasta el 05 Ene 2021 (incluyendo el 05 Ene 2021). En concreto, el cálculo es 10 + 12 + 15 + 9 + 20 = 66. Cálculo del total acumulado en SQL En SQL, el total acumulado se calcula con la ayuda de las funciones de ventana. Esta función especial de SQL puede realizar cálculos complejos con sólo unas pocas líneas de código SQL. Aquí está la función de ventana para nuestro ejemplo anterior: SELECT *, SUM(no_of_items) OVER(ORDER BY date) AS running_total FROM sales Y aquí está la explicación del código: Esta es una función ventana, denotada con la cláusula OVER. Dentro de la cláusula OVER, hay un ORDER BY. Esto nos indica cómo se ordenan las filas antes de realizar el cálculo. En nuestro caso, las filas están ordenadas por la columna de la fecha. Cuando se utilizan funciones de ventana, cada registro recibe su propio cálculo. Por lo tanto, el resultado se muestra con una columna adicional. No hay filas colapsadas cuando se trabaja con funciones de ventana. Esta es la principal diferencia entre la cláusula FUNCIONES DE VENTANA GROUP BY y la cláusula funciones de ventana en SQL. Dentro de la sentencia OVER, también se puede encontrar la palabra clave PARTITION BY. PARTITION BY agrupa las filas en particiones en las que cada cálculo de la partición se hace por separado. En nuestro ejemplo, las filas no están organizadas en particiones. Por lo tanto, todo el conjunto de datos se trata como un solo grupo. Cuando se trabaja con funciones de ventana, para cada registro de una tabla, se define un marco de ventana dentro del cual se realiza un cálculo específico. Esto se indica con la palabra clave ROW/RANGE dentro de la sentencia OVER. Si no se define esta palabra clave (como en nuestro ejemplo), se toma un valor por defecto para el marco de la ventana. Un marco de ventana por defecto de la fila actual incluye la fila actual y todas las filas anteriores. En nuestro ejemplo, cada registro de la suma total de la tabla se calcula sumando todos los valores anteriores más el actual. Por ejemplo, el total actual para el 05 Ene 2021 es 66. Es la suma de los cuatro valores anteriores (10, 12, 15 y 9) más el valor de la fila actual (20). Ejemplos de totales corridos Bien, echemos un vistazo a los escenarios de la vida real en los que se utilizan los totales corridos. 1. Seguimiento de las cuotas planificadas frente a las realizadas En ventas, cada vendedor debe cumplir con los objetivos para satisfacer los requisitos específicos del trabajo. Del mismo modo, en los sectores de las telecomunicaciones y la banca, cada división debe adquirir un número específico de nuevos clientes en cada trimestre y vender un número específico de productos a los clientes. La dirección hace un seguimiento de los resultados mediante totales móviles. Cada día se actualiza el total móvil con nuevos datos. Estas cifras suelen evaluarse mensual, trimestral o anualmente. A continuación se muestra una tabla que hace un seguimiento mensual del número de nuevos préstamos en 2021: dateplanplan_running_totalrealizationrealization_running_total 2021-01-3160606868 2021-02-287513544112 2021-03-31100235-- 2021-04-30100335-- 2021-05-31100435-- 2021-06-30100535-- Número de nuevos préstamos, planificados vs. realizados Para el primer semestre de 2021, se ha decidido vender 535 préstamos a los clientes en este periodo. Los planes se hacen para cada mes por separado, y 535 es el objetivo total para estos seis meses. La dirección hace un seguimiento de las cuotas planificadas frente a las realizadas. Por ahora, hay 112 nuevos préstamos vendidos. La tabla se seguirá actualizando a medida que pase el tiempo. A continuación se muestra el código SQL que calcula los totales en curso: SELECT date, plan, SUM(plan) OVER(order by Date) AS plan_running_total, realization, SUM(realization) OVER(order by Date) AS realization_running_total FROM sales; Al igual que en el ejemplo anterior, se utiliza una función de ventana para calcular el total acumulado. La función ventana se denota con OVER, y dentro de los paréntesis se define el orden de las filas. La función de agregación utilizada es SUM. Tenemos dos totales en funcionamiento: las cuotas planificadas y las realizadas. Por lo tanto, tenemos dos funciones ventana, y se agregan dos columnas a la tabla. 2. Cálculo de saldos Los totales corridos también se utilizan cuando se calcula un saldo. Cada vez que se realiza una nueva operación (un pago o una retirada de una cuenta), se actualiza la suma acumulada y se muestra el saldo actual. A continuación se muestra una tabla de saldos: datetransactionbalance_amount 2020-12-0150005000 2020-12-03-504950 2020-12-04-1254825 2020-12-05-1854640 2020-12-06-1424498 2020-12-09-3504148 2020-12-10-5603588 2020-12-11-803508 2020-12-12-153493 Importe de la transacción y saldo actual En la tabla anterior, vemos que la primera transacción se produjo el 01 Dic 2020-12-01, una entrada de 5.000 dólares. El saldo en este día era de 5.000 dólares. Después, el cliente empezó a gastar dinero. El 03 Dic 2020, el cliente gastó $50 (esta transacción se muestra con un valor negativo). Así, el saldo disminuyó a 4.950 $. Al día siguiente, el saldo se redujo en 125 dólares más, hasta los 4.825 dólares, y así sucesivamente. El saldo de la cuenta se calcula como un total continuo. Es la suma acumulada de todas las transacciones asociadas a esa cuenta. Con cada nueva transacción, el saldo se actualiza, es decir, se recalcula el total corriente. Esta es la función de ventana para este ejemplo: SELECT date, transaction, SUM(transaction) OVER(order by date) AS balance_amount FROM balance; 3. Operaciones de caja Los totales móviles también se utilizan en las operaciones de caja. Por ejemplo, cuando un cliente está comprando artículos en una tienda, el cajero escanea los artículos de la cesta. Con cada nuevo artículo escaneado, el total actualizado se muestra en la pantalla. Esto muestra cuánto debe pagar el cliente por los artículos escaneados hasta el momento. A continuación se muestra un ejemplo de una cesta en proceso de escaneo. Los pañales son el último artículo escaneado. Hasta ahora, el cliente tiene que pagar 19,70 EUR. El champú aún no se ha procesado, por lo que su precio aún no se ha calculado en el total de la cesta: productdatequantityprice(EUR)running_total bread2021-02-05 8:01:1011.21.2 milk2021-02-05 8:02:02112.2 apple2021-02-05 8:02:3022.54.7 icecream2021-02-05 8:03:01226.7 diapers2021-02-05 8:03:1011319.7 shampoo14- Caja registradora: escaneo de productos Esta es casi la misma función de ventana que en el ejemplo anterior (sólo difieren los nombres de las tablas y las columnas): SELECT *, SUM(price) OVER(order by date) as running_total FROM cash_register; Así, cada vez que el cajero escanea un artículo, la suma acumulada se actualiza. Con cada escaneo, el cajero sabe cuánto tiene que pagar el cliente hasta el momento. 4. Contar la ingesta diaria de calorías Si quiere perder peso, puede utilizar un total acumulado para calcular su consumo diario de calorías. Cada día, empezaría el recuento de calorías en cero y luego actualizaría el total en función de lo que coma y de la cantidad que ingiera. A continuación se muestra el recuento de calorías de un día: hoursfoodquantitycaloriesrunning_total 8:30eggs2150150 8:30bread170220 8:30milk1105325 8:30butter140365 10:30banana1105470 11:30apple190560 13:30bread2150710 13:30meat13501060 13:30soup1801140 13:30salad1301170 16:00icecream12501420 17:00cake13201740 20:00sandwich13002040 El total actual se actualiza cada vez que comes algo. Así, siempre sabrá cuánto ha comido y cuánto más puede comer ese día. Este enfoque se llama dieta de recuento de calorías, que es una opción popular. Aquí está el código que calcula el total de la carrera: SELECT calorie_intake.*, SUM(calories) OVER(ORDER BY hours) AS running_total FROM calorie_intake; Revisemos algunos otros escenarios en los que se utilizan los totales corridos. Tenga en cuenta que las funciones de la ventana que calculan los totales de carrera siguen siendo en su mayoría las mismas. Por lo tanto, a partir de ahora, explicaré brevemente los ejemplos sin incluir el código SQL. 5. Casos confirmados de COVID-19 Cada país recoge información sobre el número total de casos confirmados de COVID-19, muertes y casos curados cada día. Con esta nueva información, se actualizan los totales en curso para que cada país sepa cuántos casos confirmados, muertes y casos curados ha tenido hasta el momento, desde el inicio de la pandemia hasta ahora. Para más detalles, consulte cómo se calcula el total corriente utilizando los datos de John Hopkins: cómo analizar los datos de COVID-19. 6. Usuarios registrados de una aplicación móvil Los propietarios de aplicaciones móviles suelen querer ver la suma acumulada de los nuevos usuarios registrados y las instalaciones/desinstalaciones que se han realizado en el último mes, trimestre y/o año. También en este caso, se pueden utilizar los totales acumulados para obtener una mejor visión. Estas estadísticas indican a los propietarios cómo ha sido recibida la aplicación o una característica específica y cómo desarrollar el producto en el futuro. Del mismo modo, si se gestiona un sitio web, una de las métricas más importantes a seguir es el número total de páginas vistas o visitas. Esta información suele recogerse diariamente. Al calcular el total acumulado, se puede ver cómo se comporta la suma acumulada a lo largo del tiempo y cómo se compara con los totales acumulados en el pasado. 7. Programas de fidelización de líneas aéreas Este concepto es probablemente bien conocido por quienes vuelan con frecuencia. Con cada vuelo, se acumulan puntos. Una vez que se acumula un determinado número de puntos, se obtienen descuentos y/o recompensas. Para calcular el número total de puntos que tiene en su cuenta, se utiliza un total acumulado. Cada vez que compra un billete, el total se actualiza y sus puntos aumentan. Resumen En este artículo, he mostrado cómo se utilizan los totales acumulados en diferentes escenarios. Como ha aprendido, los totales acumulados tienen muchas aplicaciones. Las funciones de ventana de SQL permiten calcular los totales acumulados con relativa facilidad y con sólo unas pocas líneas de código. Las funciones de ventana se utilizan cuando se trata de cálculos complejos. Una vez que aprendas la sintaxis, escribirás un código más limpio y comprensible. Aunque sólo he explicado cómo utilizar las funciones ventana para los cálculos de totales corridos, las funciones ventana se utilizan ampliamente para una gran variedad de cálculos. En este artículo con ejemplos de funciones ventana, puedes aprender otras formas de utilizar las funciones ventana. También ofrecemos un gran curso interactivo en Funciones de ventana con muchos ejemplos. Si quieres profundizar en las funciones de ventana, te recomiendo encarecidamente que sigas este curso. Ofrece muchos ejercicios para practicar, lo cual es importante cuando se adquieren nuevas habilidades de SQL. Tags: SQL aprender SQL running total