PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgres - bagaimana cara mengembalikan baris dengan 0 hitungan untuk data yang hilang?

Solusi yang tepat

SELECT *
FROM  (
   SELECT day::date
   FROM   generate_series(timestamp '2007-12-01'
                        , timestamp '2008-12-01'
                        , interval  '1 month') day
   ) d
LEFT   JOIN (
   SELECT date_trunc('month', date_col)::date AS day
        , count(*) AS some_count
   FROM   tbl
   WHERE  date_col >= date '2007-12-01'
   AND    date_col <= date '2008-12-06'
-- AND    ... more conditions
   GROUP  BY 1
   ) t USING (day)
ORDER  BY day;
  • Gunakan LEFT JOIN , tentu saja.

  • generate_series() dapat menghasilkan tabel stempel waktu dengan cepat, dan sangat cepat.

  • Biasanya lebih cepat untuk mengagregasi sebelum Anda bergabung. Saya baru-baru ini memberikan kasus uji di sqlfiddle.com dalam jawaban terkait ini:

    • PostgreSQL - urutkan menurut larik
  • Keluarkan timestamp untuk date (::date ) untuk format dasar. Untuk lebih banyak gunakan to_char() .

  • GROUP BY 1 adalah singkatan sintaks untuk referensi kolom output pertama. Bisa jadi GROUP BY day juga, tapi itu mungkin bertentangan dengan kolom yang ada dengan nama yang sama. Atau GROUP BY date_trunc('month', date_col)::date tapi itu terlalu panjang untuk seleraku.

  • Bekerja dengan argumen interval yang tersedia untuk date_trunc() .

  • count() tidak pernah menghasilkan NULL (0 tanpa baris), tetapi LEFT JOIN tidak.
    Untuk mengembalikan 0 bukannya NULL di bagian luar SELECT , gunakan COALESCE(some_count, 0) AS some_count . Panduan.

  • Untuk solusi yang lebih umum atau interval waktu yang berubah-ubah pertimbangkan jawaban yang terkait erat ini:

    • Cara terbaik untuk menghitung catatan dengan interval waktu sewenang-wenang di Rails+Postgres


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membuat Pengguna Hanya Baca di PostgreSQL

  2. Migrasi dari MSSQL ke PostgreSQL - Yang Harus Anda Ketahui

  3. Oracle setara dengan Postgres 'DISTINCT ON?

  4. Tolok ukur Meltdown PostgreSQL

  5. SQL:Pilih catatan di mana SEMUA catatan yang digabungkan memenuhi beberapa kondisi