MySQL:只选择只有特定值的组

标签 mysql sql

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

具体来说,我想选择字段 Type 中值为 1 和 2 的组

  • 不包括值为 1、2、3 的组
  • 与值为1,2,5的一组相同
  • 但是,将选择值为 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。请提供任何帮助。

最佳答案

您可以使用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(*) 表示所有行都匹配。

关于MySQL:只选择只有特定值的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51332436/

相关文章:

php - mysql函数,当输入客户号码时返回带有字符串的所有地址

c# - 为什么我在此代码中收到 "You have an error in your SQL syntax"错误?

php - 获取数据并将其显示在表单中

mysql - 使用依赖子查询优化 MySQL 查询

MySQL/RDBMS : Is it okay to index long strings? 它会完成这项工作吗?

c# - 在c#中使用Prepare语句的好处

sql - Spark SQL 传递变量

sql - 约束定义的 DEFERRABLE INITIALLY IMMEDIATE 仍然是 DEFERRED?

sql - 替换 SQL 中字符串中第一次出现的子字符串

python - 通过一组字符串在 Django 中过滤