2013-06-18 5 views
1

У меня есть 2 таблицы:Соединение слева COUNT на столах

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 или sub selects, но я не могу лапшу синтаксис.

По-английски: покажите мне каждого уникального человека в таблице один со счетом каждой записи в таблице 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 Поскольку он соединяется с вычисленной таблицей, он, очевидно, должен сначала вычислить его. –

Смежные вопросы