从另一个表中获取值,从一个表中检索计数

时间:2014-08-23 21:17:44

标签: python sqlite

我试图从一个表中获取一个值并使用它在另一个表上运行count()。 我已经搜索了其他问题/答案,以帮助解决我的问题,但我还没有能够适应我在SQLite中的方案。

这是我的代码经过不幸的尝试次数:

c.execute("""SELECT MonkeyHouse.BananaType, count(*)  
FROM MonkeyVillage 
JOIN MonkeyHouse 
   ON MonkeyVillage.BananaType = MonkeyHouse.BananaType 
GROUP BY MonkeyHouse.BananaType""")

所以我试图从MonkeyHouse获取BananaTypes并检查MonkeyVillage中有多少BananaTypes(而不是与MonkeyHouse合计)。

我的代码将从MonkeyHouse中选择BananaTypes,但是当它从MonkeyVillage返回计数时,一些计数是准确的,而其他计数则不是。

我该如何解决这个问题?

更新

MonkeyHouse中存在的值(尝试使用IP搜索MonkeyVillage)

(u'10.0.0.10') - x1 (records exist)
(u'10.168.77.10') - x2 (records exist)
(u'192.168.77.190') - x1 (records exist)
(u'33.0.0.3') - x1 (records exist)

MonkeyVillage中存在的值(不包括其他IP)

(u'10.0.0.10') - x1 (records exist)
(u'10.168.77.10') - x3 (records exist)
(u'192.168.77.190') - x1 (records exist)
(u'33.0.0.3') - x2 (records exist)

我的代码返回:

(u'10.0.0.10', 1)  - Successful match
(u'10.168.77.10', 6)  - Unsuccessful 
(u'192.168.77.190', 1) - Successful match
(u'33.0.0.3', 2)  - Unsuccessful 

1 个答案:

答案 0 :(得分:2)

根据提供的数据,假设您加入了IP地址,结果对于查询来说是正确的。当您在两个表之间连接时,您的结果将是表1中记录的数量乘以表2中匹配记录的数量,因此您的数字将成倍增加。

假设“x2”表示IP地址存在2条记录,并且您只想从MonkeyVillage表中计算结果,您可能需要在MonkeyVillage表上尝试“IN”子句。

c.execute("""SELECT MonkeyVillage.BananaType, count(*)  
FROM MonkeyVillage
WHERE MonkeyVillage.BananaType IN (
SELECT MonkeyHouse.BananaType
FROM MonkeyHouse)
GROUP BY MonkeyVillage.BananaType""")