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

Bagaimana saya bisa bergabung dengan 3 tabel dan menghitung jumlah bidang yang benar dari 2 tabel, tanpa baris duplikat?

Jika saya memahami logika dengan benar, masalahnya adalah produk Cartesian yang disebabkan oleh dua gabungan. Permintaan Anda agak sulit untuk diikuti, tetapi saya pikir maksudnya lebih baik ditangani dengan subkueri yang berkorelasi:

select k.*,
       (select sum(cost)
        from ad_group_keyword_network n
        where n.event_date >= '2015-12-27' and
              n.ad_group_keyword_id = 1210802 and
              k.id = n.ad_group_keyword_id
       ) as cost,
       (select sum(clicks)
        from keyword_click c
        where (c.date is null or c.date >= '2015-12-27') and
              k.keyword_id = c.keyword_id               
       ) as clicks
from ad_group_keyword k
where k.status = 2 ;

Di sini adalah SQL Fiddle yang sesuai.

EDIT:

Subpilihan harus lebih cepat daripada group by pada data yang tidak teragregasi. Namun, Anda memerlukan indeks yang tepat:ad_group_keyword_network(ad_group_keyword_id, ad_group_keyword_id, event_date, cost) dan keyword_click(keyword_id, date, clicks) .



  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 - pg_config -bash:pg_config:perintah tidak ditemukan

  2. Mendapatkan hampir dua kali lipat panjangnya saat membaca byte[] dari postgres dengan jpa

  3. Perbaiki "INSERT memiliki lebih banyak ekspresi daripada kolom target" di PostgreSQL

  4. Rails / Postgres:"harus muncul di klausa GROUP BY atau digunakan dalam fungsi agregat"

  5. Bagaimana cara membaca sintaks dokumentasi untuk perintah PostgreSQL?