może ktoś mi podpowiedzieć jak zrobić te zapytanie?

0

dwie tabele:
 „Kontrakty” tabela zawierająca opis wszystkich kontraktów licząca 2 mln rekordów
Kontrakt_id number(10)
Grupa_id number(4)
Plan_taryfowy_id number(4)
 „Rozmowy” zawiera wpisy o rozmowach wykonywane przez kontrakt za ostatni miesiąc, liczącą 60 mln rekordów.
Kontrakt_id number(10)
Dlugosc_polączenia number(16) /*Długość połączenia w sekundach */
Dla każdego zdarzenia – rozmowy, istnieje dokładnie jeden rekord.
1.
dla każdego kontraktu istniejącego w tabeli Kontrakty, obojętnie czy wykonywał rozmowy, wyświetlić ilość połączeń dłuższych niż 1 000 sekund. W przypadku gdy kontrakt nie wykonywał połączeń lub wszystkie połączenia kontraktu były krótsze niż 1 000 sekund należy dla danego numeru kontrakt_id wyświetlić liczbę 0.

cos kombinuje ale mi nie wychodzi:

select kontrakty.kontrakt_id,
case when rozmowy.dlugosc_polaczenia>1000 then (count(rozmowy.dlugosc_polaczenia) ) else 0 end
from kontrakty inner join rozmowy
on kontrakty.kontrakt_id = rozmowy.kontrakt_id
group by kontrakty.kontrakt_id, case when rozmowy.dlugosc_polaczenia>1000 then (count(rozmowy.dlugosc_polaczenia))else 0 end

0

Raczej outer join jeśli już, bo masz też uwzglednik sytuacje kiedy ktoś w ogóle nie miał rozmów. Wtedy też te wszystkie case chyba zrobią się zbędne...

2
SELECT k.kontrakt_id, Count(r.kontrakt_id) FROM kontrakty k LEFT JOIN rozmowy r ON k.kontrakt_id=r.kontrakt_id AND r.dlugosc_polaczenia>1000 GROUP BY 1

1 użytkowników online, w tym zalogowanych: 0, gości: 1