【问题标题】:Mysql query logic not getting the same resultsMysql查询逻辑没有得到相同的结果
【发布时间】:2015-12-25 21:56:01
【问题描述】:

我有几个问题来确定这个月有多少 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回来了。我做错了什么,或者我在混淆什么逻辑?

【问题讨论】:

    标签: mysql logic


    【解决方案1】:

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

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

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

    【讨论】:

    • 所以本月返回的 IP 是 104,而不是 287?因为,我减去 875-588=287;
    • @jessica - 是的。 104不止一次回来。 287 是来过不止一次的人来的总次数
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多