2013-06-18 145 views
1

COUNT我有2個表:左連接表上

puid | personid | ptitle 
---------------------------- 
1 | 200  | richard 
2 | 201  | swiss 

suid | personidref | stitle 
---------------------------- 
1 | 200   | alf 
2 | 201   | lando 
3 | 200   | willis 
4 | 201   | luke 
5 | 201   | kojak 
6 | 200   | r2-d2 
7 | 201   | jabba 

我想留下表兩者的數量加入。我試圖找出使用generate_series或子選擇,但我不能麪條的語法。

在英語中:給我看錶1中每個獨特的人,每個條目的計數在表2中。

輸出示例:

puid | personid | ptitle | count 
--------------------------------- 
1 | 200  | richard | 3 
2 | 201  | swiss | 4 

這是很簡單的子查詢,是generate_series對工作的工具?

+0

'generate_series()'在這裏沒有任何作用。這只是「LEFT JOIN」和「GROUP BY」的簡單問題。 –

+0

虐待回去閱讀'generate_series'的文檔,並嘗試正確地應用用例,謝謝 – roberthuttinger

回答

2
select * 
from 
    t1 
    left join 
    (
     select personidref, count(*) total 
     from t2 
     group by personidref 
    ) s using(personidref) 
order by puid 

請注意,在加入之前進行聚合可能會在執行後獲得性能提升。

+0

所以這裏是一個新問題...所以子查詢總是首先發射然後正確?因此該產品可用於主查詢。我玩各種各樣的版本,以適應它。謝謝! – roberthuttinger

+1

@robert由於它連接到一個計算表,它顯然必須先計算它。 –