【问题标题】:How do i get multiple values in sql?如何在sql中获取多个值?
【发布时间】:2020-10-06 08:34:38
【问题描述】:

我陷入了循环。

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

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

到目前为止我有什么:

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

【问题讨论】:

  • 如果 GMB 的回答解决了您的问题(由于您的评论,我认为是这种情况)您可以通过接受来确认。

标签: sql postgresql join select count


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 2018-05-19
    相关资源
    最近更新 更多