college/Spring-2024/CS-1011/Relational-DB-Assignment/cmds.sql

184 lines
4.4 KiB
MySQL
Raw Normal View History

-- ┌────────────────────┐
-- │STORE TABLE AND DATA│
-- └────────────────────┘
DROP TABLE IF EXISTS STORE;
CREATE TABLE IF NOT EXISTS STORE (
Store_key INTEGER PRIMARY KEY,
City TEXT NOT NULL,
Region TEXT CHECK (Region IN ('East', 'Central', 'West')) NOT NULL
);
INSERT INTO
STORE (Store_key, City, Region)
VALUES
(1, 'New York', 'East'),
(2, 'Chicago', 'Central'),
(3, 'Atlanta', 'East'),
(4, 'Los Angeles', 'West'),
(5, 'San Francisco', 'West'),
(6, 'Philadelphia', 'East');
-- ┌──────────────────────┐
-- │PRODUCT TABLE AND DATA│
-- └──────────────────────┘
DROP TABLE IF EXISTS PRODUCT;
CREATE TABLE IF NOT EXISTS PRODUCT (
Product_key INTEGER PRIMARY KEY,
Description TEXT NOT NULL,
Brand TEXT CHECK (
Brand IN (
'MKF Studios',
'Wolf',
'Parabuster Inc.',
'Big Studios'
)
) NOT NULL
);
INSERT INTO
PRODUCT (Product_key, Description, Brand)
VALUES
(1, 'Beautiful Girls', 'MKF Studios'),
(2, 'Toy Story', 'Wolf'),
(3, 'Sense and Sensibility', 'Parabuster Inc.'),
(4, 'Holday of the Year', 'Wolf'),
(5, 'Pulp Fiction', 'MKF Studios'),
(6, 'The Juror', 'MKF Studios'),
(7, 'From Dusk Till Dawn', 'Parabuster Inc.'),
(8, 'Hellraiser: Bloodline', 'Big Studios');
-- ┌─────────────────────────┐
-- │SALES_FACT TABLE AND DATA│
-- └─────────────────────────┘
DROP TABLE IF EXISTS SALES_FACT;
-- WARN: Storing money AS floats/`REAL` is a big no-no in a real application due to floating point
-- rounding errors. For this purpose it's ok, but for the love of god and all that is holy do NOT
-- store money AS a float.
CREATE TABLE IF NOT EXISTS SALES_FACT (
Store_key INTEGER NOT NULL,
Product_key INTEGER NOT NULL,
Sales REAL NOT NULL,
Cost REAL NOT NULL,
Profit REAL NOT NULL,
FOREIGN KEY (Store_key) REFERENCES STORE (Store_key),
FOREIGN KEY (Product_key) REFERENCES PRODUCT (Product_key)
);
INSERT INTO
SALES_FACT (Store_key, Product_key, Sales, Cost, Profit)
VALUES
(1, 6, 2.39, 1.15, 1.24),
(1, 2, 16.7, 6.91, 9.79),
(2, 7, 7.16, 2.75, 4.40),
(3, 2, 4.77, 1.84, 2.93),
(5, 3, 11.93, 4.59, 7.34),
(5, 1, 14.31, 5.51, 8.80);
--- Answers to Questions ---
-- 1. What was the total profit across all stores?
SELECT
Sum(Profit) AS "Total Profit Across All Stores"
FROM
SALES_FACT;
-- 2. What is the name of the most popular product sold?
SELECT
Description AS "Name of Most Popular Product"
FROM
(
SELECT
Max(sf.Sales),
p.Description
FROM
SALES_FACT AS sf
INNER JOIN PRODUCT p ON p.Product_key = sf.Product_key
);
-- 3. How much profit did the "East" region make?
SELECT
Sum(Profit) AS "East Region Profits"
FROM
SALES_FACT AS sf
INNER JOIN STORE AS s ON s.Store_key = sf.Store_key
AND s.REGION = 'East';
-- 4. Which city had the highest cost?
SELECT
City AS "City With Highest Aggregate Cost"
FROM
(
SELECT
s.Store_key,
Max(cost_sums) AS "Total Cost",
City
FROM
(
SELECT
Store_key,
Sum(Cost) AS cost_sums
FROM
SALES_FACT
GROUP BY
Store_key
) AS sf
INNER JOIN STORE AS s ON s.Store_key = sf.Store_key
);
SELECT
City as "City With Highest Single Cost"
FROM
(
SELECT
City,
Max(Cost)
FROM
SALES_FACT AS sf
INNER JOIN STORE AS s ON s.Store_key = sf.Store_key
);
-- 5. What was the least popular product brand?
SELECT
Brand as "Least Popular Brand"
FROM
(
SELECT
Brand,
MIN(sales_sums)
FROM
(
SELECT
p.Brand,
Sum(IfNull (Sales, 0)) AS sales_sums
FROM
SALES_FACT AS sf
RIGHT JOIN PRODUCT AS p ON sf.Product_key = p.Product_key
GROUP BY
p.Brand
)
);
-- 6. Which city (or cities) sold "Sense and Sensibility"?
SELECT
City AS "City That Sold 'Sense and Sensibility'"
FROM
STORE AS s
WHERE
s.Store_key = (
SELECT
sf.Store_key
FROM
SALES_FACT as sf
WHERE
sf.Product_key = (
SELECT
p.Product_key
FROM
PRODUCT AS p
WHERE
p.Description = 'Sense and Sensibility'
)
);