我有以下表格 My_Table,其结构如下,
Name | Address
----------------
Test1 | abc
Test1 | abc
Test2 | abc
Test1 | xyz
Test2 | abc
Test3 | abc
Test4 | tyu
我需要如下输出,
Name | Address
----------------
Test2 | abc
Test3 | abc
让我解释一下输出。输出是以 block 的形式对数据进行分组,如果第二列的所有分组数据基于名称相同并且等于abc
,则选择该行。
详细说明:
Test1 有 2 个不同的值,其中一个不等于 abc
,因此它不在输出中。 Test2 和 Test3 有一个不同的值,并且它等于 abc
,因此在输出中。 Test4 有一个不同的值,但它不等于 abc
,因此不在输出中。
我尝试过的,
all = select distinct(Name) from My_Table
invalid = select distinct(Name) from My_Table where Address != 'abc'
现在,所需的输出是全部 - 无效
(减去结果集)。我使用 2 个查询实现了这一点。这可以在一次查询中实现吗?如果是,怎么办?
注意:我使用JAVA来查询MYSQL DB,因此我可以减去结果集。我的表大小很大,因此我想优化查询数量!
最佳答案
select name, max(address)
from tablename
group by name
having max(address) = min(address)
and max(address) = 'abc'
关于java - 如何在 SQL 中按 block 进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34065902/