Tables – product and sales are provided. product table holds data of all products and sales table represent sale transaction that was completed.
Write SQL query to identify buyer_id who bought S10 but not iPhone.
Input Table: sales
seller_id | product_id | buyer_id | sale_date | quantity | price |
11 | 10 | 71 | 2019-02-22 | 3 | 6000 |
11 | 20 | 72 | 2019-03-27 | 1 | 600 |
22 | 20 | 73 | 2019-07-04 | 1 | 900 |
33 | 30 | 74 | 2019-06-21 | 2 | 6600 |
22 | 10 | 74 | 2019-06-23 | 1 | 2000 |
Input Table: product
product_id | product_name | unit_price |
10 | S10 | 2000 |
20 | 7Pro | 600 |
30 | iPhone | 3300 |
Output Table:
buyer_id |
71 |
Explanation:
- buyer_id = 71 is the only buyer who purchased only S10.
- buyer_id = 74 bought both S10 and iPhone and that’s why it was excluded from final result.
DDLs:
CREATE TABLE IF NOT EXISTS product ( product_id INT, product_name VARCHAR(10), unit_price INT ); INSERT INTO product VALUES (10, 'S10', 2000); INSERT INTO product VALUES (20, '7Pro', 600); INSERT INTO product VALUES (30, 'iPhone', 3300); CREATE TABLE IF NOT EXISTS sales ( seller_id INT, product_id INT, buyer_id INT, sale_date DATE, quantity INT, price INT ); INSERT INTO sales VALUES (11, 10, 71, '2019-02-22', 3, 6000); INSERT INTO sales VALUES (11, 20, 72, '2019-03-27', 1, 600); INSERT INTO sales VALUES (22, 20, 73, '2019-07-04', 1, 900); INSERT INTO sales VALUES (33, 30, 74, '2019-06-21', 2, 6600); INSERT INTO sales VALUES (22, 10, 74, '2019-06-23', 1, 2000);
Solution:
SELECT A.buyer_id FROM sales A JOIN product B ON A.product_id = B.product_id AND B.product_name IN ( "S10", "iPhone") GROUP BY A.buyer_id HAVING SUM(CASE WHEN B.product_name="S10" THEN 1 ELSE 0 END)>0 AND SUM(CASE WHEN B.product_name="iPhone" THEN 1 ELSE 0 END)=0 ;