-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCustomers Who Bought All Products 18-10-22
More file actions
85 lines (60 loc) · 1.87 KB
/
Customers Who Bought All Products 18-10-22
File metadata and controls
85 lines (60 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
link ------- https://www.codingninjas.com/codestudio/problems/customers-who-bought-all-products_2121435?topList=top-100-sql-problems&leftPanelTab=0
Problem Statement
Table: Customer
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| customer_id | int |
| product_key | int |
+-------------+---------+
product_key is a foreign key to Product table.
Table: Product
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| product_key | int |
+-------------+---------+
product_key is the primary key column for this table.
Write an SQL query for a report that provides the customer ids from the Customer table that bought all the products in the Product table.
Return the result table in any order.
The query result format is in the following example:
Customer table:
+-------------+-------------+
| customer_id | product_key |
+-------------+-------------+
| 1 | 5 |
| 2 | 6 |
| 3 | 5 |
| 3 | 6 |
| 1 | 6 |
+-------------+-------------+
Product table:
+-------------+
| product_key |
+-------------+
| 5 |
| 6 |
+-------------+
Result table:
+-------------+
| customer_id |
+-------------+
| 1 |
| 3 |
+-------------+
The customers who bought all the products (5 and 6) are customers with id 1 and 3.
------------------- solution -----------------------
select customer_id from
(select customer_id , count(distinct product_key) cnt from customer
group by 1
order by 2 desc
) as x
where x.cnt=(select count(*) from product)
order by 1
-------------- solution 2 -----------------------------
SELECT c.customer_id
FROM Customer c
JOIN product p
ON c.product_key = p.product_key
GROUP BY c.customer_id
HAVING COUNT(DISTINCT c.product_key) = (SELECT COUNT(*) FROM product);