sql >> Database >  >> RDS >> PostgreSQL

Groepeer op maand, retourneer 0 als er geen record is gevonden

De group by clausule zal geen items maken waar er geen gegevens zijn, zoals je hebt gezien. Wat je zou kunnen doen is left join dit hele resultaat met een andere resultaatset die alle gewenste items bevat - bijvoorbeeld een die u dynamisch genereert met 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. Verbeter de prestaties van Galera Cluster voor MySQL of MariaDB

  2. De beste manier om periodiek Oracle-query's uit te voeren

  3. ResultSet sluiten maar PreparedStatement niet sluiten

  4. Hoe grafiek/hiërarchische gegevens opvragen in mysql