首页 > 解决方案 > 如何在sql中获取多个值?

问题描述

我陷入了循环。

我有一个 postgres 数据库,我必须按联合发表论文的数量过滤前 5 名唯一的共同作者对。

我想返回成对的作者姓名和论文数

SQL 架构

到目前为止我所拥有的:

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 位作者的姓名和论文数量,但我想要作者有共同作者的论文。

标签: sqlpostgresqljoinselectcount

解决方案


您可以自行加入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表来获得所需的结果。


推荐阅读