# total ❇️
La función total
es una función de ventana que devuelve la suma de todos los registros del rango.
Es una función con OVER
implícito, es decir, si no se especifica la partición se asume OVER ()
Se puede usar tanto la sintaxis OVER
del SQL estándar como la sintaxis compacta propia de Crono.
# Ejemplo
La siguiente consulta devuelve las ventas de cada mes y el total del año filtrado.
select
year(fecha) año,
month(fecha) mes,
sum(unidades) ventas,
total(ventas)
from dbo.lb_ventas
where año=2012
group by all
La consulta SQL generada es:
SELECT
year(fecha) AS [año],
month(fecha) AS mes,
sum(unidades) AS ventas,
sum(sum(unidades)) OVER () AS expr4
FROM dbo.lb_ventas
WHERE year(fecha)=2012
GROUP BY
year(fecha),
month(fecha)
También se puede incluir la cláusula PARTITION BY
. En este caso el comportamiento de total
es exactamente igual que el de sum
. La siguiente consulta muestra las ventas de todos los meses de todos los años, incluyendo el total de cada año.
select
year(fecha) anyo,
month(fecha) mes,
sum(unidades) ventas,
pct(ventas partition by anyo) pct
from dbo.lb_ventas
group by all
El SQL generado es:
SELECT
year(fecha) AS [año],
month(fecha) AS mes,
sum(unidades) AS ventas,
sum(sum(unidades)) OVER (PARTITION BY year(fecha)) AS expr4
FROM dbo.lb_ventas
GROUP BY
year(fecha),
month(fecha)
# Comentarios
La única diferencia entre sum
y total
es que total
tiene la cláusula OVER
implícita.