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

Jak mogę połączyć 3 stoły i obliczyć poprawną sumę pól z 2 stołów bez zduplikowanych wierszy?

Jeśli dobrze rozumiem logikę, problemem jest iloczyn kartezjański spowodowany przez dwa sprzężenia. Twoje zapytanie jest trochę trudne do naśladowania, ale myślę, że intencje są lepiej obsługiwane przez skorelowane podzapytania:

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 ;

Tutaj to odpowiednie skrzypce SQL.

EDYCJA:

Podselekcja powinna być szybsza niż group by na niezagregowanych danych. Potrzebujesz jednak odpowiednich indeksów:ad_group_keyword_network(ad_group_keyword_id, ad_group_keyword_id, event_date, cost) i 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. Integracja narzędzi do zarządzania PostgreSQL w środowisku produkcyjnym

  2. Dane przestrzenne w PostgreSQL

  3. Jak zaktualizować wiele rekordów za pomocą peewee

  4. Utwórz alias dla tabeli PostgreSQL

  5. Użyj wartości wierszy jako kolumn w PostgreSQL