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

Menggunakan kolom di sql gabung tanpa menambahkannya ke grup demi klausa

Anda memerlukan satu baris per faktur, jadi gabungkan payment_invoice pertama - terbaik sebelum Anda bergabung.
Saat seluruh tabel dipilih, biasanya yang tercepat adalah gabungkan dulu dan bergabung nanti :

SELECT to_char(date_trunc('month', i.create_datetime), 'MM/YYYY') AS month
     , count(*)                                   AS total_invoice_count
     , (sum(i.total) - COALESCE(sum(pi.paid), 0)) AS outstanding_balance
FROM   invoice i
LEFT   JOIN  (
    SELECT invoice_id AS id, sum(amount) AS paid
    FROM   payment_invoice pi
    GROUP  BY 1
    ) pi USING (id)
GROUP  BY date_trunc('month', i.create_datetime)
ORDER  BY date_trunc('month', i.create_datetime);

LEFT JOIN sangat penting di sini. Anda tidak ingin kehilangan faktur yang tidak memiliki baris yang sesuai di payment_invoice (belum), yang akan terjadi dengan JOIN biasa .

Oleh karena itu, gunakan COALESCE() untuk jumlah pembayaran, yang mungkin NULL.

SQL Fiddle dengan kasus uji yang ditingkatkan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pivot / tab silang dengan lebih dari satu kolom nilai

  2. PHP komet usleep memblokir apache mpm?

  3. INSERT dan serialisasi transaksi di PostreSQL

  4. Bagaimana cara menjatuhkan banyak (tetapi tidak semua) tabel dalam satu gerakan?

  5. Kata sandi default untuk pengguna saya di postgresql