我试图从一个表中获取一个值并使用它在另一个表上运行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
答案 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""")