2014-09-22 6 views
0

Рассмотрим следующий, в котором перечислены авторы некоторых книг:PostgreSQL - подсчет строк

Table 

name  bookid 
--------------- 
Alan  1 
Bob   1 
Charlie  2 
David  2 

Я хочу, чтобы узнать, как многие соавторы человек имеет над всей книгой линии. например, если Алан написал две книги, одна с Бобом и еще один с Чарли + Давида, то его общее количество соавтора должно быть 3.

То, что я пытался (но не работает):

select t1.name, count(t2.name) 
from table t1, table t2 
where t1.bookid = t2.bookid 

Любые помощь ребята? Очень признателен.

+0

что вы пробовали? –

+0

выберите t1.name, count (t2.name) из таблицы t1, таблица t2, где t1.bookid = t2.bookid – antikbd

+0

Домашнее задание? Это [учебный уровень материала] (http://www.postgresql.org/docs/current/static/tutorial.html). –

ответ

1
select t1.name, count(t2.name) 
from table1 t1, table1 t2 
where t1.bookid = t2.bookid 
and t1.name != t2.name 
group by t1.name 

sqlfiddle

+0

Может быть, 'count (different t2.name)'? Тот же автор может появляться много раз. –

+0

Также лучше сделать 'left join'. любые соавторы. –

-1
SELECT name, count(*) as cnt 
FROM table 
GROUP BY name; 
+0

будет возвращаться всегда 1 как счет в этом примере –

+0

Для вас таблица будет возвращать 1 как счет, потому что у вас нет одного автора для двух книг. Но если вы добавите новую строку с именем Alan и bookid = 3, у Alan будет 2 в качестве столбца count. –

+0

Алан и Боб два автора для той же книги. Чарли и Дэвид тоже. –

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