PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Grupuj według miesiąca, zwróć 0, jeśli nie znaleziono rekordu

group by Klauzula nie stworzy wpisów, w których nie ma danych, jak widzieliście. To, co możesz zrobić, to left join cały ten wynik z innym zestawem wyników, który zawiera wszystkie żądane wpisy — np. ten, który generujesz dynamicznie za pomocą 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL utwórz tabelę, jeśli nie istnieje

  2. Docker Compose i Postgres :Nazwa nie działa

  3. Unikalny wielokolumnowy indeks Postgres dla tabeli dołączania

  4. Najlepsza alternatywa dla ustawienia schematu PostgreSQL za pomocą PHP PDO

  5. foreach %dopar% + RPostgreSQL