Mysql 元素的ORACLE查询事件

Mysql 元素的ORACLE查询事件,mysql,sql,select,group-by,Mysql,Sql,Select,Group By,我将尝试用一个通用示例来解释: 我在MySQL中有一个表,有两列:“产品”和“客户机”。对于客户购买的每个产品,此表中都会生成一个寄存器 现在我拿了两种产品,炉子和冰箱,我想找到购买这两种产品的客户,并且只购买它们 在这种情况下,预期的结果将是马利,为什么玛丽亚不呢?因为除了炉子和冰箱,她还买了一把椅子 MySQL ORACLE select查询怎么能给出这样的结果 编辑:问题是错的,是Oracle而不是MySQL,谢谢Gordon Linoff,你可以使用聚合。假设表中没有重复项: sele

我将尝试用一个通用示例来解释:

我在MySQL中有一个表,有两列:“产品”和“客户机”。对于客户购买的每个产品,此表中都会生成一个寄存器

现在我拿了两种产品,炉子和冰箱,我想找到购买这两种产品的客户,并且只购买它们

在这种情况下,预期的结果将是马利,为什么玛丽亚不呢?因为除了炉子和冰箱,她还买了一把椅子

MySQL ORACLE select查询怎么能给出这样的结果


编辑:问题是错的,是Oracle而不是MySQL,谢谢Gordon Linoff,你可以使用聚合。假设表中没有重复项:

select client
from t
group by client
having sum( product in ('Stove', 'Refrigerator') ) = 2 and
       count(*) = 2;
如果存在重复项,则逻辑为:

select client
from t
group by client
having count(distinct case when product in ('Stove', 'Refrigerator') then product end ) = 2 and
       count(distinct product) = 2;

您可以使用聚合。假设表中没有重复项:

select client
from t
group by client
having sum( product in ('Stove', 'Refrigerator') ) = 2 and
       count(*) = 2;
如果存在重复项,则逻辑为:

select client
from t
group by client
having count(distinct case when product in ('Stove', 'Refrigerator') then product end ) = 2 and
       count(distinct product) = 2;
使用的概念:

  • 炉子
    冰箱
    的过滤记录
  • 按客户对记录进行分组
  • 每个
    客户机
    应该正好有两条不同的记录,如果是,那么它应该在结果集中
使用的概念:

  • 炉子
    冰箱
    的过滤记录
  • 按客户对记录进行分组
  • 每个
    客户机
    应该正好有两条不同的记录,如果是,那么它应该在结果集中

DISTINCT
不是一个函数,而是一个集合量词。跳过那些额外的括号,只需写
COUNT(DISTINCT Product)
,代码就更清晰了!您的WHERE必须传递所有非通缉物品。使用时必须验证它们都不存在。
DISTINCT
不是一个函数,而是一个集合量词。跳过那些额外的括号,只需写
COUNT(DISTINCT Product)
,代码就更清晰了!您的WHERE必须传递所有非通缉物品。使用必须验证它们都不存在。谢谢,这是我想问的另一个问题,当我像第一个案例一样使用它时,我得到了这样的信息:“ORA-00907:右括号未找到”你知道为什么吗?我发现问题就在这里:sum(在(‘炉子’、‘冰箱’)中的乘积)@hyfronx。问题被标记为MySQL,所以答案是针对MySQL的。Oracle中的等效逻辑是:
有sum(当产品在('cover'、'冰箱')中时为case,然后是1 else 0 end)=2
。谢谢,这是我想问的另一个问题,当我像第一个案例一样使用它时,我得到的信息是:“ORA-00907:右括号未找到”你知道为什么吗?我发现问题就在这里:sum(在(‘炉子’、‘冰箱’)中的乘积)@hyfronx。问题被标记为MySQL,所以答案是针对MySQL的。Oracle中的等效逻辑是:
具有总和(当产品在('cover','冰箱')中时,则为1,否则为0端)=2