Как получить несколько значений в sql? - PullRequest
1 голос
/ 16 июня 2020

Я застрял в l oop.

У меня есть база данных postgres, и мне нужно отфильтровать топ-5 уникальных пар соавторов по количеству совместно опубликованных статей.

Я хочу вернуть пары имен авторов и количество статей

SQL Schema

То, что у меня есть:

select persons.name as person, count(papers.pkey) as amount 
from persons 
  inner join authpapers on authpapers.akey = persons.akey 
  inner join papers on authpapers.pkey = papers.pkey  
group by persons.name 
order by amount desc limit 5;

В результате Я получаю имена первых 5 авторов и количество статей, но мне нужны статьи, в которых у автора был соавтор.

1 Ответ

1 голос
/ 16 июня 2020

Вы можете самостоятельно присоединиться к таблице persons для создания комбинаций авторов, затем принести статьи каждого человека, присоединив authpapers один раз для каждого пользователя, и, наконец, отфильтровать подходящие статьи. Последний шаг - агрегирование и сортировка:

select p1.name as person1, p2.name person2, count(*) as amount
from persons p1
inner join persons p2 on p2.akey > p1.akey
inner join authpapers ap1 on ap1.akey = p1.akey 
inner join authpapers ap2 on ap2.akey = p2.akey 
where ap1.pkey = ap2.pkey
group by p1.akey, p2.akey
order by amount desc limit 5;

Обратите внимание, что вам не нужна таблица papers для получения желаемых результатов.

...