diff --git a/LeetCode/SQL50/CustomersWhoBoughtAllProducts.sql b/LeetCode/SQL50/CustomersWhoBoughtAllProducts.sql new file mode 100644 index 0000000..66a0539 --- /dev/null +++ b/LeetCode/SQL50/CustomersWhoBoughtAllProducts.sql @@ -0,0 +1,69 @@ +-- Table: Customer + +-- +-------------+---------+ +-- | Column Name | Type | +-- +-------------+---------+ +-- | customer_id | int | +-- | product_key | int | +-- +-------------+---------+ +-- This table may contain duplicates rows. +-- customer_id is not NULL. +-- product_key is a foreign key (reference column) to Product table. + +-- Table: Product + +-- +-------------+---------+ +-- | Column Name | Type | +-- +-------------+---------+ +-- | product_key | int | +-- +-------------+---------+ +-- product_key is the primary key (column with unique values) for this table. + +-- 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: +-- Customer table: +-- +-------------+-------------+ +-- | 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. + +-- Write your PostgreSQL query statement below +-- Solution +with products_count as ( + select count(product_key) as num_products from Product +) +select customer_id from ( + select customer_id, + count(distinct product_key) as num_products_bought + from Customer group by customer_id +) tb where tb.num_products_bought in ( + select num_products from products_count +);