PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как мога да обединя 3 таблици и да изчисля правилната сума на полета от 2 таблици, без дублиращи се редове?

Ако разбирам правилно логиката, проблемът е декартовото произведение, причинено от двете съединения. Вашата заявка е малко трудна за следване, но мисля, че намерението се обработва по-добре със свързани подзаявки:

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 ;

Тук е съответният SQL Fiddle.

РЕДАКТИРАНЕ:

Подизборът трябва да е по-бърз от group by върху неагрегираните данни. Нуждаете се обаче от правилните индекси:ad_group_keyword_network(ad_group_keyword_id, ad_group_keyword_id, event_date, cost) и 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. postgres jsonb_set актуализация на множество ключове

  2. Проблеми с rails сървъра

  3. Функция за задействане на Postgres

  4. Как да променя местоположението на директорията на журнала в postgresql 9.4?

  5. Вземете стойности от първия и последния ред за група