SQL - 获取所有第一个元素共享的第二个元素的所有元组

时间:2016-12-10 11:25:19

标签: sql

我有一张桌子T,有2个属性clientid和productid。每行代表一次卖出。

我必须找到我的数据库中所有客户购买的产品数量。

我是SQL的新手,我找不到一种简单的方法。

示例:

clientid | productid
--------------------
1        | A
1        | B
1        | C
1        | D
2        | A
2        | C
2        | E
3        | A
3        | B

预期结果:

Count: 1 

因为客户1,2和3只购买了产品A

由于

1 个答案:

答案 0 :(得分:2)

一种方法:

select productid
from sales
group by productid
having count(*) = (select count(distinct clientid)
                   from sales);

以上将返回所有客户购买的所有产品。如果只需要计数,请将其包装到派生表中:

select count(*) 
from (
  select productid
  from sales
  group by productid
  having count(*) = (select count(distinct clientid)
                     from sales)
) t;

以上仅返回已订购至少一种产品的所有客户购买的产品。如果您有一个client表,其中**存储了所有*客户,则应将子查询替换为select count(*) from clients