MySQL查询选择行在整个结果集中具有两个值的行

时间:2016-11-25 16:26:29

标签: mysql

我有一个表格,其中包含我运行的多个网站的IP数据,其中我使用SiteCode列来识别哪些数据来自哪个网站:

ID    SiteCode    IP            Page
--    --------    --            ----
1     BHS         192.168.1.1   index.php
2     ED          192.168.4.4   index.php
3     BHS         192.168.1.1   index.php
4     ED          192.168.1.1   index.php

我想要做的是弄清楚我如何只选择那些在行结果集中同时包含(而非)BHS和ED行的SiteCodes的IP号码:

SELECT * FROM `ip-tracking` WHERE `IP`='192.168.1.1' ?????

我希望我已经清楚了。

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

在对每个IP地址进行分组时使用条件聚合,您可以检查以确保IP与这两种类型的站点代码相关联:

SELECT IP
FROM yourTable
GROUP BY IP
HAVING SUM(CASE WHEN SiteCode = 'BHS' THEN 1 ELSE 0 END) > 0 AND
       SUM(CASE WHEN SiteCode = 'ED'  THEN 1 ELSE 0 END) > 0

如果BHSED是表中唯一出现的两个网站代码,那么HAVING子句可以简化为:

HAVING COUNT(DISTINCT SiteCode) = 2