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

标签 mysql

我有一个表,其中包含来 self 运行的多个网站的 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' ?????

我希望我已经说清楚了。

非常感谢。

最佳答案

在对每个 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

关于MySQL查询以选择列在整个结果集中具有两个值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40809163/

相关文章:

python - 设置数据库变量为全局变量 : Python

php - MySQL 查询数组以进行 preg_replace

php - MySQLi 准备好的语句未采用调用过程的有效查询

mysql - 使用 GROUP BY 删除重复项的查询

mysql - 添加/更新并显示元值数组

php - 更新所有数据库中的过程和 View

mysql - 大 MySQL 表

mysql - 从具有多值特定列的多行的相同值中获取一行

mysql - 如何将HTML字符编码数据正确加载到My Sql数据库中?

mysql - 无法更新存储函数/触发器中的表