sql - 如何在sql中获取多个值?
问题描述
我陷入了循环。
我有一个 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 位作者的姓名和论文数量,但我想要作者有共同作者的论文。
解决方案
您可以自行加入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
表来获得所需的结果。
推荐阅读
- php - 无法比较 Ajax 中的 php 返回值
- android - 获取 java.lang.ClassCastException:无法强制转换 android.widget.SimpleAdapter
- python - 使用 KeyboardInterrupt python 唤醒一个挂起的进程
- r - dplyr 在匿名函数中做多个绘图
- typescript - Ionic v3 Segment - 滚动时更改活动段
- javascript - 如何在nodejs v6中将顺序函数转换为并行执行
- tags - 开始和结束标签在乳胶中
- python - Odoo 10:如何在联系表单视图中制作单独的地址行?
- html - 溢出列
- javascript - 使用 Cordova Hybrid 应用程序将文件复制到路径