【发布时间】:2014-07-03 01:00:26
【问题描述】:
我的 postgres 数据库中有以下数据集:
paperid | authorid | name |
---------+----------+----------------------+
896452 | 4976 | S. R. Duc |
896452 | 186921 | F. Kolo |
896452 | 318493 | C. D. Becker |
896452 | 615968 | V. B. Duthon |
896452 | 823663 | C. C. Charbonnier |
896452 | 833091 | P. Hoffmeyer |
896452 | 843054 | C. W. A. Pfirrmann |
896452 | 1058596 | J. Menetrey |
896452 | 2033639 | N. Magnenat-Thalmann |
据此,我想为给定论文的每个作者创建一个条目,并附加“共同作者”列 - 列出所有以空格分隔的共同作者,例如(但针对每个作者):
paperid | author | coauthors
---------+-------------------+------------------------------------------------------------------------------------------------------------
896452 | S. R. Duc | C. C. Charbonnier C. D. Becker C. W. A. Pfirrmann F. Kolo J. Menetrey N. Magnenat-Thalmann P. Hoffmeyer V. B. Duthon
896452 | C. C. Charbonnier | S. R. Duc C. D. Becker C. W. A. Pfirrmann F. Kolo J. Menetrey N. Magnenat-Thalmann P. Hoffmeyer V. B. Duthon
... etc for each coauthor
编辑
好的,所以现在我有一个查询,它将为列和创建的共同作者列中的每个作者创建一个交叉产品,但我仍然需要从共同作者列中删除单个作者
SELECT foo.paperid, npa.name, foo.authors FROM newpaperauthor npa CROSS JOIN (select paperid, string_agg(name, ' ') as authors
FROM newpaperauthor
GROUP BY paperid
ORDER BY paperid) foo ;
paperid | name | authors
---------+----------------------+--------------------------------------------------------------------------------------------------------------------------------
896452 | S. R. Duc | S. R. Duc F. Kolo C. D. Becker V. B. Duthon C. C. Charbonnier P. Hoffmeyer C. W. A. Pfirrmann J. Menetrey N. Magnenat-Thalmann
896452 | F. Kolo | S. R. Duc F. Kolo C. D. Becker V. B. Duthon C. C. Charbonnier P. Hoffmeyer C. W. A. Pfirrmann J. Menetrey N. Magnenat-Thalmann
896452 | C. D. Becker | S. R. Duc F. Kolo C. D. Becker V. B. Duthon C. C. Charbonnier P. Hoffmeyer C. W. A. Pfirrmann J. Menetrey N. Magnenat-Thalmann
896452 | V. B. Duthon | S. R. Duc F. Kolo C. D. Becker V. B. Duthon C. C. Charbonnier P. Hoffmeyer C. W. A. Pfirrmann J. Menetrey N. Magnenat-Thalmann
896452 | C. C. Charbonnier | S. R. Duc F. Kolo C. D. Becker V. B. Duthon C. C. Charbonnier P. Hoffmeyer C. W. A. Pfirrmann J. Menetrey N. Magnenat-Thalmann
896452 | P. Hoffmeyer | S. R. Duc F. Kolo C. D. Becker V. B. Duthon C. C. Charbonnier P. Hoffmeyer C. W. A. Pfirrmann J. Menetrey N. Magnenat-Thalmann
896452 | C. W. A. Pfirrmann | S. R. Duc F. Kolo C. D. Becker V. B. Duthon C. C. Charbonnier P. Hoffmeyer C. W. A. Pfirrmann J. Menetrey N. Magnenat-Thalmann
896452 | J. Menetrey | S. R. Duc F. Kolo C. D. Becker V. B. Duthon C. C. Charbonnier P. Hoffmeyer C. W. A. Pfirrmann J. Menetrey N. Magnenat-Thalmann
896452 | N. Magnenat-Thalmann | S. R. Duc F. Kolo C. D. Becker V. B. Duthon C. C. Charbonnier P. Hoffmeyer C. W. A. Pfirrmann J. Menetrey N. Magnenat-Thalmann
【问题讨论】:
-
你怎么知道作者和合著者是谁?
-
我想创建一个与解决方案命令之前的行数一样多的结果。看看我更新的问题。
标签: sql postgresql group-by