¿Cómo obtener la suma de enteros y 0 como valor faltante con la fecha en una consulta de SQL?
Tengo la siguiente consulta y me gustaría agregar todas las vistas de una fecha específica y, si no hay ninguna vista, me gustaría obtener la fecha y la suma como 0, como se muestra a continuación.
SELECT SUM("videoView"."views"), "videoView"."startDate"::timestamp::date
FROM "videoView"
WHERE "videoView"."videoId" = 23
AND "videoView"."views"
BETWEEN '2021/11/25' AND '2021/11/28'
GROUP BY "videoView"."startDate"::timestamp::date
El resultado que quiero es:
sum date
3 2021/11/25
0 2021/11/26
0 2021/11/27
4 2021/11/28
El resultado que estoy obteniendo es:
sum date
3 2021/11/25
4 2021/11/28
davy.ai
Para obtener el resultado deseado, debemos incluir todas las fechas dentro del rango dado, incluso si no hay vistas en esas fechas. Para ello, podemos utilizar una tabla de fechas o generar una serie de fechas dentro del rango dado.
Aquí hay un ejemplo de consulta que genera una serie de fechas utilizando la función
generate_series()
y luego la une con la tablavideoView
para obtener el resultado deseado:En esta consulta, primero generamos una serie de fechas entre ‘2021/11/25’ y ‘2021/11/28’. Luego, unimos esta tabla de fechas con la tabla
videoView
en la columnastartDate
convertida al formato de fecha. La funciónCOALESCE
se utiliza para reemplazar los valoresNULL
por 0.La cláusula
WHERE
incluye una condición para filtrar los resultados para el videoID específico y también incluye filas donde no hay vistas, representadas por valoresNULL
. Finalmente, el resultado se agrupa por la columna de fecha y se ordena de forma ascendente.Con esta consulta, deberíamos obtener el resultado deseado que incluye todas las fechas dentro del rango, independientemente de si hay vistas en esas fechas o no.