MySQL连接与计数的数据操作

2024-05-16 03:49:51 发布

您现在位置:Python中文网/ 问答频道 /正文

大纲:我有两个表格-一个是作者和书籍的字典,另一个是不同作者的书籍之间的比较

Book_id(PK)    Author               Book_id_1(CPK)   Book_id_2(CPK)    Book_similarity
=====================               ==================================================
1              Amy                  1                3                 High
2              Amy                  1                4                 Low
3              Ben                  2                3                 High
4              Ben                  2                4                 High
                                    3                1                 High
                                    3                2                 High
                                    4                1                 Low
                                    4                2                 High

问题:我正在尝试进行一个查询,它返回下表,计算找到的“高”和“低”相似性的数量-这可以将这些书追溯到编写它们的作者

Author_1(CPK)     Author_2(CPK)   Num_high   Num_low
====================================================
Amy               Ben             3          1
Ben               Amy             3          1

我意识到在最后一个表中有重叠,但这是唯一的方法,我可以使它有一列是可搜索的。我怀疑我必须使用两个查询来生成结果和某个连接,但我对MySQL还是相当陌生

NB:使用python和MySQLdb,如果这有用的话。否则,我将把查询插入python cur.execute()中


Tags: id字典作者num表格authorlow书籍
1条回答
网友
1楼 · 发布于 2024-05-16 03:49:51

问题不太清楚,但我猜你在找这样的东西:

SELECT b1.Author AS Author_1, b2.Author AS Author_2,
SUM(CASE WHEN s.Book_similarity = 'High' THEN 1 ELSE 0 END) AS Num_high,
SUM(CASE WHEN s.Book_similarity = 'Low' THEN 1 ELSE 0 END) AS Num_low
FROM similarity s
INNER JOIN book b1 ON b1.book_id = s.book_id_1
INNER JOIN book b2 ON b2.book_id = s.book_id_2
GROUP BY b1.Author, b2.Author

基本上,您只需在相似性表中的book\u id上连接book表(这样您就可以访问book\u id\u 1和book\u id\u 2中书籍的作者),然后在Num\u low和Num\u high的相似性较低时,每次都计算1(当然,当相似性较高时)

相关问题 更多 >