Mysql查询逻辑没有得到相同的结果

时间:2015-12-25 21:56:02

标签: mysql database mysqli logic

我有几个问题要确定本月有多少IP回来了。如果IP在同一天回来,它不算“回来”。它只计算IP在另一天回来。所以这是我的查询,但我的逻辑或查询都有问题:

SELECT COUNT( ip ) 
FROM ipAll 
WHERE YEAR( DATE ) = '2015' 
AND MONTH( DATE ) = '12' 

所有IP: 875

SELECT COUNT( DISTINCT ip ) 
FROM ipAll 
WHERE YEAR( DATE ) = '2015' 
AND MONTH( DATE ) = '12'  

区分IP: 588

本月回归的IP: 875-588 = 287;

SELECT ip, COUNT( ip ) AS matches 
FROM ipAll 
WHERE YEAR( DATE ) = '2015' 
AND MONTH( DATE ) = '12' 
GROUP BY ip 
HAVING matches >1 
ORDER BY matches DESC 

返回的行: 104

所以,我有点困惑。第一个结果表示本月有287个IP回来,但第二个结果表明本月有104个IP回来了。我做错了什么,或者我混淆了什么逻辑?

2 个答案:

答案 0 :(得分:1)

第二个查询为您提供了不同的IP。

第三个查询告诉您,您有104个ip显示2 或更多次。

这里没有矛盾,你可能有很多ip返回两次以上。第二个和第三个的结果不一定是第一个结果。

答案 1 :(得分:0)

  

本月回归的IP:875-588 = 287;

有了这个,你假设每个IP只返回一次。如果它只有一个IP回来287次怎么办? 最后一个查询确实告诉你它只有104个IP回来(它们的回报总和将给你287)。 所以我认为你的逻辑错了:)