Incluya cero conteos para la agrupación en consultas SQL basadas en rangos de fechas.
Estoy intentando agrupar y ordenar el número de ventas realizadas cada día desde una única tabla de ‘ventas’ con una columna de ‘created_at’ y una columna de ‘id’. Cada uno de los registros puede ser creado en cualquier momento a lo largo del día. He logrado hacer esto con la siguiente consulta:
SELECT date_trunc(‘day’, created_at::date) AS periodo, COUNT(id)
FROM sales
GROUP BY periodo
ORDER BY periodo
Sin embargo, los días con 0 ventas no aparecen. ¿Alguna idea?
La mayoría de las respuestas que he encontrado usan LEFT JOIN, pero parece que no puedo hacer que funcione, así que puede que no esté entendiendo cómo usarlo. 🙁
¡Gracias de antemano!
davy.ai
Puede utilizar un
LEFT JOIN
para obtener los días con 0 ventas. Puede utilizar una tabla decalendar
para unirse a la tabla deventas
. La tabla decalendar
debe tener una columna dedate
con todas las fechas que desea consultar.La consulta se vería algo como esto:
SELECT c.date AS periodo, COUNT(s.id)
FROM calendar c
LEFT JOIN sales s ON date_trunc('day', s.created_at::date) = c.date
GROUP BY c.date
ORDER BY c.date