首页 > 解决方案 > MySQL - 选择列值仅为0的行,按另一列分组?

问题描述

示例表:

ID, foreign_id, status

ID独一无二的,foreign_id不是。示例行:

1, 1111, 0  
2, 2222, 0  
3, 3333, 1
4, 1111, 1
5, 4444, 0

我要选择的是唯一foreign_id状态为 0 的。如果它的状态为 0 但具有相同外国 ID 的另一行的状态为 1,请不要选择它foreign_id。预期输出:

1, 2222, 0
5, 4444, 0

我可以选择 wherestatus = 0和 group by foreign_id,但这只会选择状态为 0 的行,即使可能有另一行与状态相同foreign_id且状态为 1。

SELECT ID, foreign_id 
FROM table 
WHERE status = 0 
GROUP BY foreign_id

任何帮助表示赞赏。

标签: mysqlsqldatabaseselect

解决方案


(我对此进行了编辑以证明它有效并澄清了一些事情):

您可能感兴趣的是 HAVING 语句。

您可以在GROUP BY之后使用 HAVING 语句。这是一个很好的解释: https ://www.dofactory.com/sql/having

简而言之,HAVING 语句的作用是让您过滤作为 GROUP BY 表达式的结果返回的数据。

试试这个:

SELECT 
     foreign_id, MAX(status) AS status
FROM
     myTable
GROUP BY 
     foreign_id
HAVING 
     MAX(status) = 0



这是它的工作示例(在基本的 MS Access 文件中测试):
在此处输入图像描述

然后我输入了这段代码:
在此处输入图像描述

我得到了这些结果:
在此处输入图像描述



如果您有任何问题,请告诉我!


推荐阅读