2010-10-29 15 views
1
create table Autorzy(ID int, imie varchar, nazwisko varchar); 
create table Wydawnictwa(ID int, nazwa varchar, adres varchar, tel varchar); 
create table Ksiazki(ID int, ISBN bigint, wydawnictwo_id int, data date, ilosc int, tytul varchar); 
create table KsiazkaAutor(ID int, autor_id int, ksiazka_id int); 
create table Recenzje (id int, tresc varchar, autor_id int, ksiazka_id int); 

que je peux faire:deux chefs d'accusation sur deux jointures dans une requête

select a.imie, a.nazwisko, count(ka.id) as IloscKsiazek 
from autorzy a 
left join KsiazkaAutor ka on a.id=ka.autor_id 
group by a.imie, a.nazwisko; 

pour sélectionner le nombre de KsiazkaAutor

ou

select a.imie, a.nazwisko, count(r.id) as IloscRecenzji 
from autorzy a 
left join Recenzje r on a.id=r.autor_id 
group by a.imie, a.nazwisko; 

pour sélectionner le nombre de Recenzje.

Comment puis-je obtenir les deux comptes dans un SELECT?

EDIT: 1er sélectionnez:

"Bolesław"; "Prus"; 3
"Adam", "Kowalski", 5
"Stephen", "roi"; 3
"Andrzej" ; "Sapkowski"; 3
"Władysław"; "Reymont"; 3
"Richard", "Dawkins"; 3
"Zofia"; "Nalkowska"; 3
"Henryk"; "Sienkiewicz"; 3
"Terry"; "Pratchett"; 3
"Eliza"; "Orzeszkowa"; 4
"Adam"; "Mickiewicz"; 2
"John RR"; "Tolkien"; 5
"Mikołaj"; "Kopernik"; 1
"LEN" ; "Śmierdzący"; 0
"Jan", "Nowak", 5
"Kamil"; "Kowalik"; 0
"Ignacy"; "Krasicki"; 3

2ème sélection:

"Bolesław"; "Prus"; 0
"Adam"; "Kowal ski "0
"Stephen"," King "0
"Andrzej";" Sapkowski "; 0
"Władysław";" Reymont "; 0
"Richard"," Dawkins "; 0
"Zofia"; "Nalkowska"; 0
"Henryk"; "Sienkiewicz"; 1
"Terry"; "Pratchett "; 0
"Eliza";" Orzeszkowa"; 2
"Adam"; "Mickiewicz "0
" John RR"" Tolkien "0
" Nicolas "" Copernic "0
" LEN "" Smelly "0
" John "" Smith "0
" Kamil "" Kowalik « ; 0
"Ignace" "Krasicki" 0

votre réponse:

"George", "Prusse « , 3, 0
" Adam "" Smith", 5, 0
" Stephen "" roi "; 3; 0
" Andrew "" Sapkowski « ; 3; 0
"Reymont"Wladyslaw" « ; 3; 0
" Richard"," Dawkins'; 3; 0
"Sophia", "Nalkowska '; 3; 0
" Henry "" Sienkiewicz'; 3; 3
"Terry" « Pratchett '; 3; 0
" Eliza "" Orzeszkowa'; 8; 8
"Adam", "Mickiewicz « ; 2; 0
" John RR", "Tolkien" , 5, 0
"Nicolas", "Copernic", 1, 0
"LEN" "Smelly"; 0; 0
"John", "Smith", 5, 0
"Kamil"; " Kowalik "; 0; 0
"Ignace", "Krasicki"; 3; 0

Répondre

4

Oui, vous pouvez faire:

select a.imie, a.nazwisko, 
count(ka.id) as IloscKsiazek1, 
count(r.id) as IloscKsiazek2 
from autorzy a 
left join KsiazkaAutor ka on a.id=ka.autor_id 
left join Recenzje r on a.id=r.autor_id 
group by a.imie, a.nazwisko; 

Vous pouvez également essayer distinct mot-clé dans la clause count:

select a.imie, a.nazwisko, 
count(distinct ka.id) as IloscKsiazek1, 
count(distinct r.id) as IloscKsiazek2 
from autorzy a 
left join KsiazkaAutor ka on a.id=ka.autor_id 
left join Recenzje r on a.id=r.autor_id 
group by a.imie, a.nazwisko; 
+0

+1 - Battez-moi! – JNK

+0

@ksogor - basé sur quoi? postgre ne supporte pas plusieurs jointures? – JNK

+0

Cela ne fonctionne pas bien. Il renvoie count (r.id) égal à count (count) lorsque count (r.id)> 0 et 0 sinon. –