0% found this document useful (0 votes)
48 views3 pages

PUBS SQL Solutions

The document contains SQL exercises and their solutions related to a PUBS database. It includes creating tables, updating records, and various select queries to analyze employee data, sales, authors, and publishers. Each question addresses a specific SQL task, demonstrating different SQL functionalities such as joins, aggregations, and subqueries.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
48 views3 pages

PUBS SQL Solutions

The document contains SQL exercises and their solutions related to a PUBS database. It includes creating tables, updating records, and various select queries to analyze employee data, sales, authors, and publishers. Each question addresses a specific SQL task, demonstrating different SQL functionalities such as joins, aggregations, and subqueries.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

PUBS Database SQL Exercise Solutions

Question a
CREATE TABLE EMPLOYEE (
emp_id INT PRIMARY KEY,
fname VARCHAR(50),
lname VARCHAR(50),
stor_id VARCHAR(10),
job_id INT,
pub_id VARCHAR(10),
hire_date DATE,
job_lvl INT,
city VARCHAR(50),
state VARCHAR(50),
zip VARCHAR(10),
country VARCHAR(50),
managerID INT,
supervisorID INT
);

Question b
UPDATE SALE
SET discount_id = (
SELECT discount_id FROM DISCOUNT WHERE discount = 0.25
)
WHERE title_id = (
SELECT title_id FROM TITLES WHERE titlename = 'Flight runner'
)
AND saledate > '2019-03-31';

Question c
SELECT
e1.fname || ' ' || e1.lname AS Employee_Name,
CASE
WHEN e1.pub_id IS NOT NULL THEN
(SELECT fname || ' ' || lname FROM EMPLOYEE e2 WHERE e2.emp_id =
e1.managerID)
ELSE
(SELECT fname || ' ' || lname FROM EMPLOYEE e2 WHERE e2.emp_id =
e1.supervisorID)
END AS Manager_or_Supervisor
FROM EMPLOYEE e1;

Question d
SELECT COUNT(*) AS Native_Employees
FROM EMPLOYEE
WHERE country IN (
SELECT country FROM COUNTRY WHERE COUNTRY.country = EMPLOYEE.country
);

Question e
SELECT c.continent, COUNT(e.emp_id) AS Employee_Count
FROM EMPLOYEE e
JOIN COUNTRY c ON e.country = c.country
WHERE e.pub_id IS NOT NULL
GROUP BY c.continent;

Question f
SELECT t.type, SUM(s.quantity) AS Total_Sold
FROM SALE s
JOIN TITLES t ON s.title_id = t.title_id
GROUP BY t.type
HAVING SUM(s.quantity) > 20000;

Question g
SELECT DISTINCT a.au_fname || ' ' || a.au_lname AS Author_Name
FROM AUTHOR a
JOIN TITLEAUTHOR ta ON a.au_id = ta.au_id
JOIN TITLES t ON ta.title_id = t.title_id
WHERE EXTRACT(YEAR FROM t.pub_date) = 2019
AND EXISTS (
SELECT 1 FROM TITLES t2
JOIN TITLEAUTHOR ta2 ON t2.title_id = ta2.title_id
WHERE ta2.au_id = a.au_id
AND EXTRACT(YEAR FROM t2.pub_date) <= 1994
);

Question h
SELECT s.stor_name, SUM(sl.quantity) AS Total_Sold
FROM STORE s
JOIN SALE sl ON s.stor_id = sl.stor_id
WHERE s.country = 'India' AND EXTRACT(YEAR FROM sl.saledate) = 2019
GROUP BY s.stor_name;

Question i
SELECT a.au_fname || ' ' || a.au_lname AS Author_Name, MAX(s.quantity * t.price *
ta.royalityshare) AS Revenue
FROM AUTHOR a
JOIN TITLEAUTHOR ta ON a.au_id = ta.au_id
JOIN TITLES t ON ta.title_id = t.title_id
JOIN SALE s ON t.title_id = s.title_id
WHERE EXTRACT(YEAR FROM s.saledate) = 2019
GROUP BY a.au_fname, a.au_lname
ORDER BY Revenue DESC
LIMIT 1;

Question j
SELECT DISTINCT p.pub_name
FROM PUBLISHER p
JOIN TITLES t ON p.pub_id = t.pub_id
WHERE EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM MIN(t.pub_date)) > 30
GROUP BY p.pub_id, p.pub_name;

Question k
SELECT c.continent, COUNT(DISTINCT a.au_id) AS Total_Authors
FROM AUTHOR a
JOIN TITLEAUTHOR ta ON a.au_id = ta.au_id
JOIN TITLES t ON ta.title_id = t.title_id
JOIN PUBLISHER p ON t.pub_id = p.pub_id
JOIN COUNTRY c ON a.country = c.country
GROUP BY c.continent
HAVING COUNT(DISTINCT ta.title_id) >= 3;

Question l
SELECT j.job_id, COUNT(e.emp_id) AS Total_Employees
FROM JOB j
LEFT JOIN EMPLOYEE e ON j.job_id = e.job_id
GROUP BY j.job_id;
Question m
SELECT s.discount_id, COUNT(DISTINCT s.order_num) AS Total_Orders
FROM SALE s
GROUP BY s.discount_id;

Question n
SELECT SUM(s.quantity * t.price) AS Total_Sales
FROM SALE s
JOIN TITLES t ON s.title_id = t.title_id
JOIN DISCOUNT d ON s.discount_id = d.discount_id
WHERE d.discount > 0.05;

Question o
-- Type-wise total, average, and maximum price
SELECT
t.type,
SUM(t.price) AS Total_Price,
AVG(t.price) AS Average_Price,
MAX(t.price) AS Maximum_Price
FROM TITLES t
GROUP BY t.type;

-- Total number of orders for 'Business' type books


SELECT COUNT(s.order_num) AS Total_Business_Orders
FROM SALE s
JOIN TITLES t ON s.title_id = t.title_id
WHERE t.type = 'business';

You might also like