From 1dffccb139b681002ed74f189e6c8203ae471343 Mon Sep 17 00:00:00 2001 From: Devon Sherwood Date: Fri, 6 Nov 2026 13:43:28 -0600 Subject: [PATCH 1/2] Complete assignment-two --- .../Microcredential_Cohort/Assignment2.md | 5 ++++- .../bookstore.drawio.png | Bin 0 -> 122370 bytes 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 02_activities/assignments/Microcredential_Cohort/bookstore.drawio.png diff --git a/02_activities/assignments/Microcredential_Cohort/Assignment2.md b/02_activities/assignments/Microcredential_Cohort/Assignment2.md index f1329042f..29c5ceac6 100644 --- a/02_activities/assignments/Microcredential_Cohort/Assignment2.md +++ b/02_activities/assignments/Microcredential_Cohort/Assignment2.md @@ -57,7 +57,10 @@ The store wants to keep customer addresses. Propose two architectures for the CU **HINT:** search type 1 vs type 2 slowly changing dimensions. ``` -Your answer... +In both cases, the customer address table would need to link customer_id to the customer. +Type 1 is the overwrite option, which would include utilizing the UPDATE function in SQL. The original address would be replaced with a new address, leaving a 1:1 relationship between customer and customer_address. +Type 2 retains original address information by using the INSERT function in SQL to add another row. In a case where a customer moved, two (or more) addresses would be linked to the same customer ID, creating a 1:M relationship. Possible additions would include start_date and end_date. + ``` *** diff --git a/02_activities/assignments/Microcredential_Cohort/bookstore.drawio.png b/02_activities/assignments/Microcredential_Cohort/bookstore.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..a083b410c0b89cfc71268dede7df66dab3b4f553 GIT binary patch literal 122370 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 Date: Fri, 6 Nov 2026 13:45:39 -0600 Subject: [PATCH 2/2] Complete assignment-two second commit --- .../Microcredential_Cohort/assignment2.sql | 231 ++++++++++++++++-- 1 file changed, 217 insertions(+), 14 deletions(-) diff --git a/02_activities/assignments/Microcredential_Cohort/assignment2.sql b/02_activities/assignments/Microcredential_Cohort/assignment2.sql index f4a2b999a..6d0fb0a7f 100644 --- a/02_activities/assignments/Microcredential_Cohort/assignment2.sql +++ b/02_activities/assignments/Microcredential_Cohort/assignment2.sql @@ -23,8 +23,13 @@ Edit the appropriate columns -- you're making two edits -- and the NULL rows wil All the other rows will remain the same. */ --QUERY 1 +SELECT +coalesce(product_name, '') || ', ' || +product_size || ' (' || +coalesce(product_qty_type, 'unit') || ')' +FROM product; - +--This fix still provides a NULL result for 13 and would have to be expanded to return zero NULLS --END QUERY @@ -41,6 +46,16 @@ HINT: One of these approaches uses ROW_NUMBER() and one uses DENSE_RANK(). Filter the visits to dates before April 29, 2022. */ --QUERY 2 +SELECT +customer_id, +market_date, +DENSE_RANK() OVER ( +PARTITION BY customer_id +ORDER BY market_date +) AS visit_number +FROM customer_purchases +WHERE market_date < '2022-04-29' +ORDER BY customer_id, market_date; @@ -53,8 +68,19 @@ only the customer’s most recent visit. HINT: Do not use the previous visit dates filter. */ --QUERY 3 - - +SELECT * +FROM ( +SELECT DISTINCT +customer_id, +market_date, +DENSE_RANK() OVER ( +PARTITION BY customer_id +ORDER BY market_date DESC +) AS visit_number +FROM customer_purchases +) AS recent_visits +WHERE visit_number = 1 +ORDER BY customer_id; --END QUERY @@ -66,7 +92,13 @@ You can make this a running count by including an ORDER BY in the window functio Filter the visits to dates before April 29, 2022. */ --QUERY 4 - +SELECT +*, +COUNT(*) OVER ( +PARTITION BY customer_id, product_id) +AS product_purchase_count +FROM customer_purchases +WHERE market_date < '2022-04-29'; --END QUERY @@ -85,8 +117,16 @@ Remove any trailing or leading whitespaces. Don't just use a case statement for Hint: you might need to use INSTR(product_name,'-') to find the hyphens. INSTR will help split the column. */ --QUERY 5 +SELECT +product_name, +CASE +WHEN INSTR(product_name, "-") > 0 +THEN TRIM (SUBSTR(product_name, INSTR(product_name, '-') +1)) +ELSE NULL +END AS description +FROM product; - +--+1 to define position --END QUERY @@ -94,8 +134,9 @@ Hint: you might need to use INSTR(product_name,'-') to find the hyphens. INSTR w /* 2. Filter the query to show any product_size value that contain a number with REGEXP. */ --QUERY 6 - - +SELECT * +FROM product +WHERE product_size REGEXP '[0-9]'; --END QUERY @@ -111,8 +152,41 @@ HINT: There are a possibly a few ways to do this query, but if you're struggling with a UNION binding them. */ --QUERY 7 - - +DROP TABLE IF EXISTS ranked_sales; +DROP TABLE IF EXISTS daily_sales; + +CREATE TEMP TABLE daily_sales AS +SELECT +market_date, +SUM(quantity * cost_per_quantity) AS total_sales +FROM customer_purchases +GROUP BY market_date; + +CREATE TEMP TABLE ranked_sales AS +SELECT +market_date, +total_sales, +RANK() OVER ( +ORDER BY total_sales DESC +) AS sales_rank, +RANK() OVER ( +ORDER BY total_sales ASC +) AS reverse_rank +FROM daily_sales; + +SELECT +market_date, +total_sales +FROM ranked_sales +WHERE sales_rank = 1 + +UNION + +SELECT +market_date, +total_sales +FROM ranked_sales +WHERE reverse_rank = 1; --END QUERY @@ -132,8 +206,30 @@ How many customers are there (y). Before your final group by you should have the product of those two queries (x*y). */ --QUERY 8 +--QUERY 8 - +SELECT +v.vendor_name, +p.product_name, +SUM(5 * vi.original_price) AS total_sales +FROM ( +SELECT DISTINCT +vendor_id, +product_id, +original_price +FROM vendor_inventory +) AS vi +JOIN vendor AS v +ON vi.vendor_id = v.vendor_id +JOIN product AS p +ON vi.product_id = p.product_id +CROSS JOIN customer AS c +GROUP BY +v.vendor_name, +p.product_name +ORDER BY +v.vendor_name, +p.product_name; --END QUERY @@ -145,8 +241,22 @@ It should use all of the columns from the product table, as well as a new column Name the timestamp column `snapshot_timestamp`. */ --QUERY 9 +DROP TABLE IF EXISTS product_units; - +CREATE TABLE product_units AS +SELECT +product_id, +product_name, +product_size, +product_category_id, +product_qty_type, +CURRENT_TIMESTAMP AS snapshot_timestamp +FROM product +WHERE product_qty_type = 'unit'; + +--Checking the table because I couldn't see it +SELECT * +FROM product_units; --END QUERY @@ -155,8 +265,48 @@ Name the timestamp column `snapshot_timestamp`. */ This can be any product you desire (e.g. add another record for Apple Pie). */ --QUERY 10 - - +INSERT INTO product_units +VALUES (24, 'Cut Roses Bouquet', 'medium', 5, 'unit', CURRENT_TIMESTAMP); + +--Checking the table because I couldn't see it +SELECT * +FROM product_units; + +SELECT * +FROM product_units +WHERE product_id = 24; + +--This is where I realized that I took the instructions wrong ughhhh +DELETE FROM product_units +WHERE product_id = 24; + +SELECT * +FROM product_units +WHERE product_id = 24; + +INSERT INTO product_units +VALUES (6, 'Cut Zinnias Bouquet', 'medium', 5, 'unit', CURRENT_TIMESTAMP); + +SELECT * +FROM product_units +WHERE product_id = 6; + +--Checking why they have the same timestamp +SELECT + product_id, + product_name, + snapshot_timestamp +FROM product_units +WHERE product_name = 'Cut Zinnias Bouquet'; + +SELECT + rowid, + product_id, + product_name, + snapshot_timestamp +FROM product_units +WHERE product_name = 'Cut Zinnias Bouquet'; +--Finally --END QUERY @@ -167,8 +317,27 @@ This can be any product you desire (e.g. add another record for Apple Pie). */ HINT: If you don't specify a WHERE clause, you are going to have a bad time.*/ --QUERY 11 +DELETE FROM product_units +WHERE product_id = 6 +AND snapshot_timestamp = '2026-11-06 18:42:18'; +--Checking +SELECT + rowid, + product_id, + product_name, + snapshot_timestamp +FROM product_units +WHERE product_id = 6; +--Unforunately, re-running created multiple entries AND updated the timestamps, so I have to use rowid + +DELETE FROM product_units +WHERE rowid = 4; + +SELECT * +FROM product_units +WHERE product_id = 6; --END QUERY @@ -191,8 +360,42 @@ Finally, make sure you have a WHERE statement to update the right row, When you have all of these components, you can run the update statement. */ --QUERY 12 +ALTER TABLE product_units +ADD current_quantity INT; - +--Finding last value by most recent market date +SELECT product_id, +MAX(market_date) AS last_market_date +FROM vendor_inventory +GROUP BY product_id; + +--Retrieving values +SELECT +vi.product_id, +vi.market_date, +vi.quantity +FROM vendor_inventory AS vi +WHERE vi.market_date = ( +SELECT MAX(vi2.market_date) +FROM vendor_inventory AS vi2 +WHERE vi2.product_id = vi.product_id +); + +UPDATE product_units +SET current_quantity = COALESCE(( + SELECT vi.quantity + FROM vendor_inventory AS vi + WHERE vi.product_id = product_units.product_id + AND vi.market_date = ( + SELECT MAX(vi2.market_date) + FROM vendor_inventory AS vi2 + WHERE vi2.product_id = product_units.product_id + ) +), 0); + +--Verifying +SELECT * +FROM product_units; --END QUERY