184 lines
4.4 KiB
SQL
184 lines
4.4 KiB
SQL
-- ┌────────────────────┐
|
|
-- │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'
|
|
)
|
|
);
|