# 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.