2010-10-29 118 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