Description
Table: Customer
| Column Name | Type |
|---|---|
| customer_id | int |
| product_key | int |
- This table may contain duplicates rows.
customer_idis not NULL.product_keyis a foreign key (reference column) toProducttable.
Table: Product
| Column Name | Type |
|---|---|
| product_key | int |
product_keyis the primary key (column with unique values) for this table.
Problem Statement
Write a solution to report the customer ids from the Customer table that bought all the products in the Product table.
Return the result table in any order.
The result format is in the following example.
Example 1:
Input:
Customertable:
| customer_id | product_key |
|---|---|
| 1 | 5 |
| 2 | 6 |
| 3 | 5 |
| 3 | 6 |
| 1 | 6 |
Product table:
| product_key |
|---|
| 5 |
| 6 |
Output:
| customer_id |
|---|
| 1 |
| 3 |
Explanation:
- The customers who bought all the products (5 and 6) are customers with IDs 1 and 3.
Solution
You need to verify that customer_id has bought all products from Product table. This you can verify by actually checking the product_key values from the Customer table, or by simply checking the COUNT(DISTINCT product_key) value from the Customer table. The solution uses second approach.
- Find the count of distinct
product_keyfromProducttable. - For each customer in
Customertable, find the count of distinctproduct_key. If this count matches the count from step 1, then the customer has bought all products fromProducttable.
1SELECT customer_id
2 FROM Customer
3 GROUP BY customer_id
4 HAVING COUNT(DISTINCT product_key) IN (
5 SELECT COUNT(DISTINCT product_key) FROM Product
6 );


Comments