diff --git a/02_activities/assignments/Cohort_8/FarmersMarket-DB-ER-Diagram-Mermaid.mmd b/02_activities/assignments/Cohort_8/FarmersMarket-DB-ER-Diagram-Mermaid.mmd new file mode 100644 index 000000000..e5f140e62 --- /dev/null +++ b/02_activities/assignments/Cohort_8/FarmersMarket-DB-ER-Diagram-Mermaid.mmd @@ -0,0 +1,92 @@ +--- +config: + layout: elk +--- +erDiagram + POSTAL_DATA ||--o{ CUSTOMER : "fk_postal_code → postal_code_3" + PRODUCT_CATEGORY ||--o{ PRODUCT : "fk_product_product_category1" + VENDOR ||--o{ VENDOR_INVENTORY : "fk_vendor_inventory_vendor1" + PRODUCT ||--o{ VENDOR_INVENTORY : "product_id (FK)" + MARKET_DATE_INFO ||--o{ VENDOR_INVENTORY : "market_date (PK part)" + VENDOR ||--o{ VENDOR_BOOTH_ASSIGNMENTS : "vendor_id_fk" + BOOTH ||--o{ VENDOR_BOOTH_ASSIGNMENTS : "booth_number_fk" + MARKET_DATE_INFO ||--o{ VENDOR_BOOTH_ASSIGNMENTS : "market_date_fk" + CUSTOMER ||--o{ CUSTOMER_PURCHASES : "fk_customer_purchases_customer1" + VENDOR_INVENTORY ||--o{ CUSTOMER_PURCHASES : "fk_customer_purchases_vendor_inventory1" + BOOTH { + int booth_number PK + varchar booth_price_level + varchar booth_description + varchar booth_type + } + CUSTOMER { + int customer_id PK + nvarchar customer_first_name + nvarchar customer_last_name + char customer_postal_code FK + } + CUSTOMER_PURCHASES { + int product_id PK, FK + int vendor_id PK, FK + date market_date PK, FK + int customer_id PK, FK + time transaction_time PK + decimal quantity + decimal cost_to_customer_per_qty + } + MARKET_DATE_INFO { + date market_date PK + varchar market_day + varchar market_week + varchar market_year + varchar market_start_time + varchar market_end_time + blob special_notes + varchar market_season + varchar market_min_temp + varchar market_max_temp + int market_rain_flag + int market_snow_flag + } + POSTAL_DATA { + char postal_code_3 PK + nvarchar city + nvarchar district + int population + int median_household_income + float percent_under_14 + float percent_over_65 + int labour_force + float latitude + float longitude + } + PRODUCT { + int product_id PK + int product_category_id PK, FK + varchar product_name + varchar product_size + varchar product_qty_type + } + PRODUCT_CATEGORY { + int product_category_id PK + varchar product_category_name + } + VENDOR { + int vendor_id PK + varchar vendor_name + varchar vendor_type + varchar vendor_owner_first_name + varchar vendor_owner_last_name + } + VENDOR_BOOTH_ASSIGNMENTS { + int vendor_id PK, FK + int booth_number PK, FK + date market_date PK, FK + } + VENDOR_INVENTORY { + date market_date PK, FK + int vendor_id PK, FK + int product_id PK, FK + decimal quantity + decimal original_price + } diff --git a/02_activities/assignments/Cohort_8/FarmersMarket-DB-ER-Diagram-Mermaid.png b/02_activities/assignments/Cohort_8/FarmersMarket-DB-ER-Diagram-Mermaid.png new file mode 100644 index 000000000..b6e0db936 Binary files /dev/null and b/02_activities/assignments/Cohort_8/FarmersMarket-DB-ER-Diagram-Mermaid.png differ diff --git a/02_activities/assignments/Cohort_8/assignment1.sql b/02_activities/assignments/Cohort_8/assignment1.sql index c992e3205..1e3e2bff2 100644 --- a/02_activities/assignments/Cohort_8/assignment1.sql +++ b/02_activities/assignments/Cohort_8/assignment1.sql @@ -5,17 +5,23 @@ --SELECT /* 1. Write a query that returns everything in the customer table. */ +SELECT * FROM customer; /* 2. Write a query that displays all of the columns and 10 rows from the cus- tomer table, sorted by customer_last_name, then customer_first_ name. */ - +SELECT * +FROM customer +ORDER BY customer_last_name, customer_first_name +LIMIT 10; --WHERE /* 1. Write a query that returns all customer purchases of product IDs 4 and 9. */ - +SELECT * +FROM customer_purchases +WHERE product_id IN (4, 9); /*2. Write a query that returns all customer purchases and a new calculated column 'price' (quantity * cost_to_customer_per_qty), filtered by customer IDs between 8 and 10 (inclusive) using either: @@ -24,9 +30,19 @@ filtered by customer IDs between 8 and 10 (inclusive) using either: */ -- option 1 +SELECT + *, + (quantity * cost_to_customer_per_qty) AS price +FROM customer_purchases +WHERE customer_id >= 8 + AND customer_id <= 10; -- option 2 - +SELECT + *, + (quantity * cost_to_customer_per_qty) AS price +FROM customer_purchases +WHERE customer_id BETWEEN 8 AND 10; --CASE @@ -34,19 +50,49 @@ filtered by customer IDs between 8 and 10 (inclusive) using either: Using the product table, write a query that outputs the product_id and product_name columns and add a column called prod_qty_type_condensed that displays the word “unit” if the product_qty_type is “unit,” and otherwise displays the word “bulk.” */ - - +SELECT + product_id, + product_name, + CASE + WHEN product_qty_type = 'unit' THEN 'unit' + ELSE 'bulk' + END AS prod_qty_type_condensed +FROM product; /* 2. We want to flag all of the different types of pepper products that are sold at the market. add a column to the previous query called pepper_flag that outputs a 1 if the product_name contains the word “pepper” (regardless of capitalization), and otherwise outputs 0. */ +SELECT + product_id, + product_name, + CASE + WHEN product_qty_type = 'unit' THEN 'unit' + ELSE 'bulk' + END AS prod_qty_type_condensed, + CASE + WHEN LOWER(product_name) LIKE '%pepper%' THEN 1 + ELSE 0 + END AS pepper_flag +FROM product; --JOIN /* 1. Write a query that INNER JOINs the vendor table to the vendor_booth_assignments table on the vendor_id field they both have in common, and sorts the result by vendor_name, then market_date. */ +SELECT + v.vendor_id, + v.vendor_name, + v.vendor_type, + v.vendor_owner_first_name, + v.vendor_owner_last_name, + vba.booth_number, + vba.market_date +FROM vendor AS v +INNER JOIN vendor_booth_assignments AS vba + ON v.vendor_id = vba.vendor_id +ORDER BY v.vendor_name, vba.market_date; @@ -56,6 +102,11 @@ vendor_id field they both have in common, and sorts the result by vendor_name, t /* 1. Write a query that determines how many times each vendor has rented a booth at the farmer’s market by counting the vendor booth assignments per vendor_id. */ +SELECT + vendor_id, + COUNT(*) AS booth_rental_count +FROM vendor_booth_assignments +GROUP BY vendor_id; /* 2. The Farmer’s Market Customer Appreciation Committee wants to give a bumper @@ -64,7 +115,23 @@ of customers for them to give stickers to, sorted by last name, then first name. HINT: This query requires you to join two tables, use an aggregate function, and use the HAVING keyword. */ - +SELECT + c.customer_id, + c.customer_first_name, + c.customer_last_name, + SUM(cp.quantity * cp.cost_to_customer_per_qty) AS total_spent +FROM customer AS c +INNER JOIN customer_purchases AS cp + ON c.customer_id = cp.customer_id +GROUP BY + c.customer_id, + c.customer_first_name, + c.customer_last_name +HAVING + SUM(cp.quantity * cp.cost_to_customer_per_qty) > 2000 +ORDER BY + c.customer_last_name, + c.customer_first_name; --Temp Table /* 1. Insert the original vendor table into a temp.new_vendor and then add a 10th vendor: @@ -78,14 +145,35 @@ When inserting the new vendor, you need to appropriately align the columns to be VALUES(col1,col2,col3,col4,col5) */ - +CREATE TEMPORARY TABLE new_vendor AS +SELECT * +FROM vendor; + +INSERT INTO new_vendor ( + vendor_id, + vendor_name, + vendor_type, + vendor_owner_first_name, + vendor_owner_last_name +) +VALUES ( + 10, + 'Thomass Superfood Store', + 'Fresh Focused', + 'Thomas', + 'Rosenthal' +); -- Date /*1. Get the customer_id, month, and year (in separate columns) of every purchase in the customer_purchases table. HINT: you might need to search for strfrtime modifers sqlite on the web to know what the modifers for month and year are! */ - +SELECT + customer_id, + STRFTIME('%m', market_date) AS month, + STRFTIME('%Y', market_date) AS year +FROM customer_purchases; /* 2. Using the previous query as a base, determine how much money each customer spent in April 2022. @@ -94,3 +182,10 @@ Remember that money spent is quantity*cost_to_customer_per_qty. HINTS: you will need to AGGREGATE, GROUP BY, and filter... but remember, STRFTIME returns a STRING for your WHERE statement!! */ +SELECT + customer_id, + SUM(quantity * cost_to_customer_per_qty) AS total_spent +FROM customer_purchases +WHERE STRFTIME('%m', market_date) = '04' + AND STRFTIME('%Y', market_date) = '2022' +GROUP BY customer_id;