# pct ❇️
La función pct
es una función de ventana que devuelve el porcentaje de cada valor respecto 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 porcentaje de cada mes respecto el total del año.
select
year(fecha) anyo,
month(fecha) mes,
sum(unidades) ventas,
pct(ventas) pct
from dbo.lb_ventas
where anyo=2012
group by all
La consulta SQL generada es:
SELECT
year(fecha) AS anyo,
month(fecha) AS mes,
sum(unidades) AS ventas,
CASE WHEN sum(sum(unidades)) OVER ()<>0 THEN 1.0*sum(unidades)/sum(sum(unidades)) OVER () END AS [pct]
FROM dbo.lb_ventas
WHERE year(fecha)=2012
GROUP BY
year(fecha),
month(fecha)
También se puede incluir la cláusula PARTITION BY
. La siguiente consulta muestra las ventas de todos los meses de todos los años, incluyendo el porcentaje de cada mes respecto al total anual.
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 anyo,
month(fecha) AS mes,
sum(unidades) AS ventas,
CASE WHEN sum(sum(unidades)) OVER (PARTITION BY year(fecha))<>0 THEN 1.0*sum(unidades)/sum(sum(unidades)) OVER (PARTITION BY year(fecha)) END AS [pct]
FROM dbo.lb_ventas
GROUP BY
year(fecha),
month(fecha)
← ntile pctrank ❇️ →