From 52e8aa30d75f52072191623cac453ac579790dcc Mon Sep 17 00:00:00 2001 From: SeharShakir Date: Sat, 15 Aug 2026 18:46:57 -0400 Subject: [PATCH] this_is_assignment_2 --- .../Microcredential_Cohort/Assignment2.md | 3 + .../LMD_book_store_A2.png | Bin 0 -> 31630 bytes .../Microcredential_Cohort/assignment2.sql | 147 ++++++++++++++---- 3 files changed, 117 insertions(+), 33 deletions(-) create mode 100644 02_activities/assignments/Microcredential_Cohort/LMD_book_store_A2.png diff --git a/02_activities/assignments/Microcredential_Cohort/Assignment2.md b/02_activities/assignments/Microcredential_Cohort/Assignment2.md index 2c39be5ff..d0628995c 100644 --- a/02_activities/assignments/Microcredential_Cohort/Assignment2.md +++ b/02_activities/assignments/Microcredential_Cohort/Assignment2.md @@ -57,6 +57,9 @@ The store wants to keep customer addresses. Propose two architectures for the CU ``` Your answer... + +One architecture would contain coulmns as customer_id, address, city, province, postal_code and country. if customer moves, we can simply update the address but will lost any previopus record (TYPE 1) +Second architecture would be to include above coulomns witha ddition 3 columns, start_date, end_date as well as current_status. when the address changes, a new address can be added and the end date will be the start date of the new address and if current_status is 1 it will mean that address is valid, if 0 it means that is the old record. (Type 2) ``` *** diff --git a/02_activities/assignments/Microcredential_Cohort/LMD_book_store_A2.png b/02_activities/assignments/Microcredential_Cohort/LMD_book_store_A2.png new file mode 100644 index 0000000000000000000000000000000000000000..84b19f015513edd638fb9365b869ad51df5ee0a5 GIT binary patch literal 31630 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 0 + THEN TRIM(SUBSTR(product_name, INSTR(product_name,'-') + 1)) + ELSE NULL +END AS description +From product --END QUERY /* 2. Filter the query to show any product_size value that contain a number with REGEXP. */ --QUERY 6 - - - +Select product_name, product_size +From product +Where product_size REGEXP '[0-9]' --END QUERY @@ -111,9 +133,42 @@ HINT: There are a possibly a few ways to do this query, but if you're struggling with a UNION binding them. */ --QUERY 7 - - - +WITH daily_sales AS ( + SELECT + market_date, + SUM(quantity * cost_per_quantity) AS total_sales + FROM customer_purchases + GROUP BY market_date +), + +ranked_sales AS ( + SELECT + market_date, + total_sales, + ROW_NUMBER() OVER ( + ORDER BY total_sales DESC + ) AS best_day, + ROW_NUMBER() OVER ( + ORDER BY total_sales ASC + ) AS worst_day + FROM daily_sales +) + +SELECT + market_date, + total_sales, + 'best day' AS day_type +FROM ranked_sales +WHERE best_day = 1 + +UNION + +SELECT + market_date, + total_sales, + 'worst day' AS day_type +FROM ranked_sales +WHERE worst_day = 1; --END QUERY @@ -132,9 +187,16 @@ How many customers are there (y). Before your final group by you should have the product of those two queries (x*y). */ --QUERY 8 - - - +SELECT v.vendor_name, p.product_name, +SUM(vi.original_price * 5) AS total_sales +FROM vendor_inventory 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 ( + SELECT COUNT(DISTINCT customer_id) AS customer_count FROM customer) AS c +GROUP BY v.vendor_name, p.product_name --END QUERY @@ -144,9 +206,11 @@ This table will contain only products where the `product_qty_type = 'unit'`. It should use all of the columns from the product table, as well as a new column for the `CURRENT_TIMESTAMP`. Name the timestamp column `snapshot_timestamp`. */ --QUERY 9 - - - +CREATE TABLE product_units AS +Select *, +CURRENT_TIMESTAMP AS snapshot_timestamp +FROM product +Where product_qty_type = 'unit' --END QUERY @@ -154,10 +218,8 @@ Name the timestamp column `snapshot_timestamp`. */ /*2. Using `INSERT`, add a new row to the product_units table (with an updated timestamp). This can be any product you desire (e.g. add another record for Apple Pie). */ --QUERY 10 - - - - +INSERT INTO product_units (product_id, product_name, product_size, product_category_id, product_qty_type, snapshot_timestamp) +VALUES (257, 'Apple Pie', '1 pie', '10', 'unit', CURRENT_TIMESTAMP); --END QUERY @@ -167,12 +229,11 @@ 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 = 7; --END QUERY - -- UPDATE /* 1.We want to add the current_quantity to the product_units table. First, add a new column, current_quantity to the table using the following syntax. @@ -190,9 +251,29 @@ Finally, make sure you have a WHERE statement to update the right row, you'll need to use product_units.product_id to refer to the correct row within the product_units table. When you have all of these components, you can run the update statement. */ --QUERY 12 +ALTER TABLE product_units +ADD current_quantity INT; - - +UPDATE product_units +SET current_quantity = COALESCE( + ( + SELECT quantity + FROM ( + SELECT + product_id, + quantity, + market_date, + ROW_NUMBER() OVER ( + PARTITION BY product_id + ORDER BY market_date DESC + ) AS rn + FROM vendor_inventory + ) AS latest + WHERE latest.product_id = product_units.product_id + AND latest.rn = 1 + ), + 0 +); --END QUERY