2010-10-29 125 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); 

我可以这样做:选择两项罪名在两个连接在一个查询

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; 

从KsiazkaAutor

SELECT COUNT

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; 

从Recenzje选择计数。

如何在一个SELECT中同时得到两个计数?

编辑: 第一选择:

“博莱斯瓦夫”; “普鲁斯”; 3
“亚当”; “科瓦尔斯基”; 5
“泉”, “特大”; 3
“安杰伊” ; “Sapkowski”; 3
“瓦迪斯瓦夫”; “雷蒙特”; 3
“理查德”; “道金斯”; 3
“苏菲雅”; “Nałkowska”; 3
“亨里克”; “显克微支”; 3
“Terry”;“Pratchett”; 3
“伊丽莎”; “Orzeszkowa”; 4
“亚当”; “密坎凯维奇”; 2
“约翰RR”, “托尔金”; 5
“Mikołaj”; “哥白尼”; 1
“LEN” ; “Śmierdzący” 0
“扬”, “诺瓦克”; 5
“卡米尔”; “Kowalik” 0
“伊格纳奇”; “Krasicki”; 3

第二选择:

“Bolesław”;“Prus”; 0
“Adam”;“Kowal滑雪 “; 0
”泉“,” 王 “; 0
”安杰“,” Sapkowski “0
”瓦迪斯瓦夫“,” 雷蒙特 “0
”理查德“,” 道金斯的“0
“苏菲雅”; “Nałkowska” 0
“亨里克”; “显克微支”; 1
“特里”; “普莱契 ”0
“伊丽莎”;“ Orzeszkowa”; 2
“亚当”;“密茨凯维奇“; 0
”John RR“” 托尔金 “0
” 尼古拉斯 “” 哥白尼 “0
” LEN “” 臭 “0
” 约翰 “” 史密斯 “0
” 卡米尔 “” Kowalik“; 0
“伊格” “Krasicki” 0

你的答案:

“乔治”, “普鲁士“; 3; 0
" 亚当 ”“ 史密斯”,5,0
"泉 “” 王 “; 3; 0
” 安德鲁 “” Sapkowski“; 3; 0
“瓦拉迪斯罗” “雷蒙特“; 3; 0
" 理查德”,“Dawkins的; 3; 0
”索菲亚“,”Nalkowska '; 3; 0
" 亨利 “” 显克微支'; 3; 3
“特里”“普拉切特 '; 3; 0
" 伊丽莎 “” Orzeszkowa'; 8; 8
“亚当”, “密坎凯维奇“; 2; 0
" 约翰RR”,“托尔金” ,5,0
“尼古拉斯”, “哥白尼”,1,0
“LEN” “臭”; 0; 0
“约翰”, “史密斯”,5,0
“卡米尔”;“ Kowalik“; 0; 0
“伊格内修斯”, “Krasicki”; 3; 0

回答

4

是的,你可以这样做:

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; 

您也可以尝试count子句中distinct关键字:

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 - 击败我! – JNK 2010-10-29 12:42:42

+0

@ksogor - 基于什么? postgre不支持多个连接? – JNK 2010-10-29 12:43:20

+0

它行不通。当count(r.id)> 0时返回count(r.id)等于count(count),否则返回0。 – 2010-10-29 12:43:50