【发布时间】:2021-10-10 13:54:54
【问题描述】:
我有一张这样的桌子:
----------------
| ID | Author |
----------------
| 24 | Cathy |
| 24 | NULL |
| 24 | NULL |
| 24 | Thomas |
| 70 | Cathy |
| 70 | NULL |
| 99 | Lisa |
----------------
想象一下,Cathy 的所有ID 与其他Authors 共同出现的频率。
结果应该是4 共同作者(3x NULL + 1x Thomas)。
现在我想找出哪个Author(谁IS NOT NULL)的共同作者数量最多,这可能会导致如下结果:
---------------------------------
| Author | Number of Co-Authors |
---------------------------------
| Cathy | 4 |
| Thomas | 3 |
| Lisa | 0 |
---------------------------------
在 MySQL 中怎么可能?感谢您的帮助!
【问题讨论】:
-
您是否有理由接受了一个甚至没有运行的答案:dbfiddle.uk/…?
-
@forpas 另一个问题将是
GROUP BY author,这是模棱两可的,但由于答案包括额外的列,看起来这里涉及读心术。我们永远不会知道原因。 -
@forpas,您指出这一点很有趣。是的, astentx 是正确的,在我的实际情况下,有更多的列,更多的“内部连接”等,并且将 berihulel 的解决方案适应我的情况是最容易为我工作的解决方案(是的,它确实有效 - 奇怪! )。
-
@anpami 很有趣。你的表中有列 paper_id 吗?我在你的问题中没有看到它。如果你真的拥有它,berihulel 是怎么知道的?如果不是,您是如何调整包含假想列的解决方案的?
-
@forpas,不,我的表中没有
paper_id列。不知道为什么berihulel插入它(现在好像被删除了?)。解释整个表格太复杂了,但是我使用的查询,基于 berihulel,现在看起来像这样:SELECT x.orcid, x.family, x.given, COUNT(DISTINCT(y.orcid)) total FROM aureg x LEFT JOIN aureg y ON y.orcid <> x.orcid AND y.doi = x.doi INNER JOIN preg ON preg.doi = x.doi WHERE x.orcid IS NOT NULL AND y.orcid IS NOT NULL AND preg.date >= '2021-01-01' AND preg.date <= '2021-06-30' GROUP BY orcid ORDER BY total DESC