sql >> Databasteknik >  >> RDS >> PostgreSQL

Gruppera efter månad, returnera 0 om ingen post hittas

group by klausul kommer inte att skapa poster där det inte finns några data, som du har sett. Vad du kan göra är att left join Hela detta resultat med en annan resultatuppsättning som har alla poster du vill ha - t.ex. en du dynamiskt genererar med generate_series :

SELECT    generate_series AS month_number, cnt
FROM      GENERATE_SERIES(1,12) g
LEFT JOIN (SELECT     COUNT(s.id) AS cnt, 
                      DATE_PART('month', s.viewed_at) AS month_number
           FROM       statistics_maps_view s
           INNER JOIN maps m ON s.maps_id = m.id 
           WHERE      m.users_id = $users_id 
           GROUP BY   month_number) s ON g.generate_series = s.month_number
ORDER BY  1 ASC



  1. hur man använder \timing i postgres

  2. @BatchSize en smart eller dum användning?

  3. Oracle SQL Hitta de 5 lägsta lönerna

  4. Hur kombinerar man flera kolumner som en och formaterar med anpassade strängar?