SQL Challenges-1: Retailers buying history
SQL Challenges-1: Exercise-36 with Solution
From the following table write a SQL query to find those retailers who have bought 'key board' but not 'mouse'. Return retailer ID.
Input:
Table: item
Structure:
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
item_code | int(11) | NO | PRI | ||
item_desc | varchar(255) | YES | |||
cost | int(11) | YES |
Data:
item_code | item_desc | cost |
---|---|---|
101 | mother board | 2700 |
102 | RAM | 800 |
103 | key board | 300 |
104 | mouse | 300 |
Table: sales_info
Structure:
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
distributor_id | int(11) | YES | |||
item_code | int(11) | YES | |||
retailer_id | int(11) | YES | |||
date_of_sell | date | YES | |||
quantity | int(11) | YES | |||
total_cost | int(11) | YES |
Data:
distributor_id | item_code | retailer_id | date_of_sell | quantity | total_cost |
---|---|---|---|---|---|
5001 | 101 | 1001 | 2020-02-12 | 3 | 8100 |
5001 | 103 | 1002 | 2020-03-15 | 15 | 4500 |
5002 | 101 | 1001 | 2019-06-24 | 2 | 5400 |
5001 | 104 | 1003 | 2019-09-11 | 8 | 2400 |
5003 | 101 | 1003 | 2020-10-21 | 5 | 13500 |
5003 | 104 | 1002 | 2020-12-27 | 10 | 3000 |
5002 | 102 | 1001 | 2019-05-18 | 12 | 9600 |
5002 | 103 | 1004 | 2020-06-17 | 8 | 2400 |
5003 | 103 | 1001 | 2020-04-12 | 3 | 900 |
Sample Solution:
SQL Code(MySQL):
CREATE TABLE item (item_code int not null unique, item_desc varchar(255), cost int);
INSERT INTO item VALUES(101,'mother board', 2700);
INSERT INTO item VALUES(102,'RAM', 800);
INSERT INTO item VALUES(103,'key board',300);
INSERT INTO item VALUES(104,'mouse',300);
CREATE TABLE sales_info (distributor_id int, item_code int, retailer_id int, date_of_sell date, quantity int, total_cost int);
INSERT INTO sales_info VALUES(5001,101,1001,'2020-02-12',3,8100);
INSERT INTO sales_info VALUES(5001,103,1002,'2020-03-15',15,4500);
INSERT INTO sales_info VALUES(5002,101,1001,'2019-06-24',2,5400);
INSERT INTO sales_info VALUES(5001,104,1003,'2019-09-11',8,2400);
INSERT INTO sales_info VALUES(5003,101,1003,'2020-10-21',5,13500);
INSERT INTO sales_info VALUES(5003,104,1002,'2020-12-27',10,3000);
INSERT INTO sales_info VALUES(5002,102,1001,'2019-05-18',12,9600);
INSERT INTO sales_info VALUES(5002,103,1004,'2020-06-17',8,2400);
INSERT INTO sales_info VALUES(5003,103,1001,'2020-04-12',3,900);
SELECT retailer_id
FROM sales_info
JOIN item
USING(item_code)
WHERE item_desc IN ('mouse', 'key board')
GROUP BY retailer_id
HAVING SUM(DISTINCT item_code) =
(SELECT item_code FROM item WHERE item_desc = 'key board');
Sample Output:
retailer_id| -----------| 1001| 1004|
SQL Code Editor:
Contribute your code and comments through Disqus.
Previous: Sales Analysis.
Next: Sale history of items for a particular period.
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://w3resource.com/sql-exercises/challenges-1/sql-challenges-1-exercise-36.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics