Nazrin Lab6
Nazrin Lab6
name NVARCHAR(100),
surname NVARCHAR(100),
nickname NVARCHAR(100)
);
book_ID INT,
author_ID INT,
);
title NVARCHAR(255),
category_ID INT,
);
published_year YEAR,
book_ID INT,
publisher_id INT,
);
name NVARCHAR(100)
);
name_of_category NVARCHAR(100)
);
name_of_plan NVARCHAR(100),
availability NVARCHAR(50)
);
name NVARCHAR(100),
surname NVARCHAR(100),
email NVARCHAR(100),
phone NVARCHAR(15),
status NVARCHAR(50)
);
valid_time DATETIME,
deadline DATETIME,
book_copyID INT,
customerid INT,
plan_id INT,
);
(2, 'HarperCollins'),
1.. Count the total number of books sold for each publisher, including a grand total using
`ROLLUP`.
SELECT
PublisherName,
COUNT(*) AS TotalBooksSold
FROM
BookCopy
INNER JOIN
Publisher ON BookCopy.PublisherlD =
Publisher.PublisherlD
GROUP BY
ROLLUP(PublisherName);
2. Calculate the total revenue generated by each book, grouped by book title.
SELECT
BookTitle,
SUM(SalePrice) AS TotalRevenue
FROM
Checkout
INNER JOIN
Book ON Checkout.BookID =
Book.BookID
GROUP BY BookTitle;
3. Find the average quantity of books purchased per order, grouped by customer, only for
customers who have purchased more than 5 books.
SELECT
CustomerID, AVG(Quantity) AS
AvgBooksPurchased
FROM
Checkout
GROUP BY
CustomerID
HAVING
SUM(Quantity) > 5;
4. Retrieve the total number of books available in stock for each publisher, grouped by publisher
name.
SELECT
PublisherName, SUM(CopiesInStock) AS
TotalBooksInStock
FROM
Book
INNER JOIN
Publisher ON Book.PublisherlD =
Publisher.PublisherlD
GROUP BY
PublisherName;
7. Count the number of reviews written by each customer, grouped by their customer ID.
SELECT
CustomerID,
COUNT (ReviewID) AS TotalReviews
FROM
CustomerAccount
LEFT JOIN
Reviews ON
CustomerAccount.CustomerlD =
Reviews.CustomerlD
GROUP BY CustomerlD;
8. Calculate the total revenue generated for each order, grouped by order ID, including orders
with no revenue.
SELECT
OrderlD,
COALESCE(SUM(SalePrice), 0) AS
TotalRevenue
FROM
Checkout
LEFT JOIN
BookCopy ON Checkout.BookCopyID
= BookCopy.BookCopyID
GROUP BY OrderlD;
9. Retrieve the total number of orders placed by each customer, grouped by city, including cities
with no orders.
SELECT
City,
COUNT(OrderlD) AS TotalOrders
FROM
CustomerAccount
LEFT JOIN
Checkout ON
CustomerAccount.CustomerlD =
Checkout.CustomerID
GROUP BY
City;
10. Find the minimum and maximum list price of books grouped by genre, including genres with no books.
SELECT
Category Name,
MIN (ListPrice) AS MinPrice, MAX(ListPrice) AS MaxPrice
FROM
Book
RIGHT JOIN
Category ON Book.CategoryID =
Category.CategorylD
GROUP BY
CategoryName;