2014-11-02 36 views
3

如果沒有資質匹配,如何顯示0?如何在計數中顯示0?

我當前的查詢是:

select s.sname, count(*) as number 
from sailor s, boat b 
where s.rating >= b.rating 
group by s.sname 
order by number desc; 

而且我得到的結果是:

a 3 
b 3 
c 2 

然而,這是不是真的就是我想要的目的。我想顯示的結果是這樣的:

a 3 
b 3 
c 2 
d 0 
e 0 

我試圖改變計數()到ISNULL(計數(),0)或合併(COUNT(*),0),但它不糾正這個案例。

CREATE TABLE sailor (
    sname character varying primary key, 
    rating integer 
); 

create table boat (
    bname character varying primary key, 
    color character varying, 
    rating integer 
); 
+0

您可以發佈水手和船的結構? – 2014-11-02 03:42:35

回答

1

這可能會幫助你

select s.sname,(select count(*) 
from boat b 
where s.rating >= b.rating 
) t 
from sailor s 
order by t desc; 

SQLFIDDLE

+0

+1。這是完美的 – WhatAName 2014-11-02 04:06:34

1

您使用的是內部聯接,兩個表中的數據相匹配時,僅返回行。

要返回水手沒有任何匹配的船,使用outer join

select s.sname, count(*) as number 
from sailor s 
left join boat b on s.rating >= b.rating 
group by s.sname 
order by number desc;