SQL: Problem z COUNT / zliczenie wartości zerowych

0

Cześć, mam taką oto łamigłówkę:

Dla przejrzystości niech tabela PERSON posiada jedynie klucz główny PERSON_ID, a tabela PERSON_CARS posiada dwa atrybuty: PERSON_ID (klucz obcy) oraz CAR_ID - tabela PERSON przechowuje informacje o kierowcach, a w tabeli PERSON_CARS mamy informację kto jeździ danym samochodem.

Wartości w tabeli PERSON są następujące:
1
2
3
4

Wartości w tabeli PERSON_CARS są następujące:
1 1
1 2
3 3
3 4
(czyli osoby 1 i 3 mają po 2 samochody, a 2 i 4 - żadnego).

Zagadką dla mnie jest skonstruowanie takiego zapytania SQL, które zwróci coś takiego:
PERSON COUNT

1 2
2 0
3 2
4 0

Problemem jest to, że jeśli zrobimy najprostsze zapytanie z COUNT to otrzymamy jedynie dwa wiersze: 1 2 oraz 3 2:

select person_id, count(*)
from person_cars
group by person_id;

Gdy użytkownik nie ma żadnego samochodu - count nie zwróci 0 tylko po prostu nie wyświetli wiersza (co jest oczywiste). Jak rozwiązać ten problem?

0

No to chyba oczywiste że musisz zrobić zlączenie z tabelą PERSON bo interesujace cię rekordy są tylko tam. Coś w stylu:

select p.person_id, count(pc.car_id) from
person as p left outer join person_cars as pc on p.person_id = pc.person_id
group by p.person_id
0

Dziękuję. Rzeczywiście left outer join załatwił sprawę. W Twoim przykładzie dwie droble literówki, poprawna wersja to:

select p.person_id, count(pc.car_id) 
from person p left outer join person_cars pc on p.person_id = pc.person_id
group by p.person_id
;

Dzięki raz jeszcze

Marek

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