mirror of
https://github.com/youronlydimwit/Data_ScienceUse_Cases.git
synced 2025-12-19 16:49:44 +01:00
120 lines
3.5 KiB
SQL
120 lines
3.5 KiB
SQL
create database BikeStore
|
|
|
|
-- Adding Foreign Keys
|
|
---- Products
|
|
ALTER TABLE products
|
|
ADD CONSTRAINT Brand_to_Prod
|
|
FOREIGN KEY (brand_id) REFERENCES brands(brand_id);
|
|
|
|
ALTER TABLE products
|
|
ADD CONSTRAINT Cat_to_Prod
|
|
FOREIGN KEY (category_id) REFERENCES categories(category_id);
|
|
|
|
---- Staffs
|
|
ALTER TABLE staffs
|
|
ALTER COLUMN store_id TINYINT
|
|
|
|
ALTER TABLE staffs
|
|
ADD CONSTRAINT Store_to_Staff
|
|
FOREIGN KEY (store_id) REFERENCES stores(store_id);
|
|
|
|
---- Stocks
|
|
ALTER TABLE stocks
|
|
ADD CONSTRAINT Store_to_Stock
|
|
FOREIGN KEY (store_id) REFERENCES stores(store_id);
|
|
|
|
ALTER TABLE stocks
|
|
ADD CONSTRAINT Prod_to_Stock
|
|
FOREIGN KEY (product_id) REFERENCES products(product_id);
|
|
|
|
---- Orders
|
|
ALTER TABLE orders
|
|
ADD CONSTRAINT PK_Orders
|
|
PRIMARY KEY (order_id);
|
|
|
|
ALTER TABLE orders
|
|
ADD CONSTRAINT Cust_to_Orders
|
|
FOREIGN KEY (customer_id) REFERENCES customers(customer_id);
|
|
|
|
ALTER TABLE orders
|
|
ADD CONSTRAINT Store_to_Orders
|
|
FOREIGN KEY (store_id) REFERENCES stores(store_id);
|
|
|
|
ALTER TABLE orders
|
|
ADD CONSTRAINT Staff_to_Orders
|
|
FOREIGN KEY (staff_id) REFERENCES staffs(staff_id);
|
|
|
|
--- Order_Items
|
|
ALTER TABLE order_items
|
|
ADD CONSTRAINT orderItems_to_orders
|
|
FOREIGN KEY (order_id) REFERENCES orders(order_id);
|
|
|
|
-- BEGINNER LEVELS
|
|
--- Retrieve a list of full names and ID's of customers in the database.
|
|
SELECT DISTINCT
|
|
[Customer ID] = customer_id,
|
|
[Full Name] = CONCAT(first_name, ' ',last_name)
|
|
FROM
|
|
BikeStore.dbo.customers
|
|
|
|
--- Find the total number of orders placed by each customer, sort it from largest to smallest.
|
|
SELECT
|
|
[Customer ID] = C.customer_id,
|
|
[Full Name] = CONCAT(C.first_name, ' ',C.last_name),
|
|
[Order Count] = COUNT(O.order_id)
|
|
FROM
|
|
BikeStore.dbo.customers C join BikeStore.dbo.orders O on C.customer_id = O.customer_id
|
|
GROUP BY
|
|
C.customer_id, C.first_name, C.last_name
|
|
ORDER BY
|
|
[Order Count] desc
|
|
|
|
--- List all the products in a specific category.
|
|
SELECT
|
|
[Category] = category_name,
|
|
[Product Name] = product_name
|
|
FROM products P join categories C on P.category_id = C.category_id
|
|
|
|
--- Calculate the total sales (without discount) for a specific store.
|
|
SELECT
|
|
[Store Name] = store_name,
|
|
[Total Sales] = CAST(SUM(O.list_price*quantity) as INT)
|
|
FROM
|
|
stores S join orders D on S.store_id = D.store_id join order_items O on D.order_id = O.order_id
|
|
GROUP BY
|
|
store_name
|
|
ORDER BY
|
|
[Store Name] desc
|
|
|
|
--- Get the names of staff members working at Baldwin Bikes.
|
|
SELECT
|
|
[Full Name] = CONCAT(S.first_name, ' ',S.last_name)
|
|
FROM
|
|
staffs S join stores T on S.store_id = T.store_id
|
|
WHERE T.store_name like 'Baldwin Bikes'
|
|
|
|
--- Find the brands of products that are out of stock.
|
|
SELECT DISTINCT
|
|
[Brand] = B.brand_name,
|
|
[Stock] = S.quantity
|
|
FROM brands B join products P on B.brand_id = P.brand_id join stocks S on S.product_id = P.product_id
|
|
WHERE S.quantity = 0
|
|
|
|
--- Identify the store names, couunt of them buying from that store, placed by Onita Johns.
|
|
SELECT
|
|
[Full Name] = CONCAT(C.first_name, ' ',C.last_name),
|
|
[Store Name] = S.store_name,
|
|
[Count of Orders] = COUNT(order_id)
|
|
FROM customers C join orders O on C.customer_id = O.customer_id join stores S on O.store_id = S.store_id
|
|
WHERE C.first_name like 'Onita' AND C.last_name like 'Johns'
|
|
GROUP BY
|
|
C.first_name, C.last_name, S.store_name
|
|
|
|
--- List all products that are only ordered <=5 times.
|
|
SELECT
|
|
[Product Name] = P.product_name,
|
|
[Order Count] = COUNT(O.order_id)
|
|
FROM order_items O join products P on P.product_id = O.product_id
|
|
GROUP BY P.product_name
|
|
HAVING COUNT(O.order_id) < 5 or COUNT(O.order_id) = 5
|