LeetCode:Database 37.买下所有产品的客户

Posted Xiao Miao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode:Database 37.买下所有产品的客户相关的知识,希望对你有一定的参考价值。

要求:写一条 SQL 查询语句,从 Customer 表中查询购买了 Product 表中所有产品的客户的 id。

Customer 表的结构:

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| customer_id | int     |
| product_key | int     |
+-------------+---------+
product_key 是 Customer 表的外键。

Product 表的结构:

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| product_key | int     |
+-------------+---------+
product_key 是这张表的主键。

Customer 表:

+-------------+-------------+
| customer_id | product_key |
+-------------+-------------+
| 1           | 5           |
| 2           | 6           |
| 3           | 5           |
| 3           | 6           |
| 1           | 6           |
+-------------+-------------+

Product 表:

+-------------+
| product_key |
+-------------+
| 5           |
| 6           |
+-------------+

Result Table:

Result 表:
+-------------+
| customer_id |
+-------------+
| 1           |
| 3           |
+-------------+
购买了所有产品(5 和 6)的客户的 id 是 1 和 3 。

分析:
1.要求求出购买product表中所有产品的客户id,因此可以通过distinct去重求出每个客户购买不同产品的总数
2.求出product中产品总数,判断用户购买的产品总数等于product中产品总数的用户id就是最终结果

SQL语句:

select customer_id from(
select a.customer_id,count(distinct a.product_key) as c1,count(distinct b.product_key) as c2
from customer a
join product b
group by a.customer_id )c
where c1=c2;

以上是关于LeetCode:Database 37.买下所有产品的客户的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode:Database 83.列出指定时间段内所有的下单产品

LeetCode:Database 75.向公司CEO汇报工作的所有人

LeetCode:Database 53.查询活跃业务

LeetCode:Database 39.产品销售分析 I

LeetCode:Database 17.员工奖金

LeetCode:Database 29.树节点