首页 > 解决方案 > MySQL:仅选择仅具有某些值的组

问题描述

我想选择其中只有某些值的组。这将排除具有这些值和其他值的组。

详细地说,我想选择字段Type中值为 1 和 2 的组

例如,考虑下表

         Type1   f_Name     Product
User A     1       Bob       Orange
User A     2       Bob       Apple
User B     1       Bill      Orange
User B     2       Bill      Apple
User B     3       Bill      Peach

在这种情况下,我希望用户 A 出现,而​​不是用户 B。

我尝试使用 NOT IN 子句来做到这一点,但数据只会取出值并将用户包含在不需要的值中。在这种情况下,用户 B 出现但没有值 3。请提供任何帮助。

标签: mysqlsql

解决方案


您可以使用group byhaving来识别组:

select f_name
from t
group by f_name
having sum( (Type1 = 1) ) > 0 and
       sum( (Type1 = 2) ) > 0 and
       sum( (Type1 in (1, 2) ) = count(*);

子句中的每个条件都会having计算与条件匹配的行数。> 0说至少有一排。= count(*)说所有行都匹配。


推荐阅读