From 65c64f7c2f4f4a351145157f07ea6010154b1df6 Mon Sep 17 00:00:00 2001 From: Simeon Date: Sun, 20 Apr 2025 13:54:23 -0400 Subject: [PATCH 1/3] assignment 1 sql sub --- 02_activities/assignments/assignment1.sql | 83 ++++++++++++++++++++--- 1 file changed, 75 insertions(+), 8 deletions(-) diff --git a/02_activities/assignments/assignment1.sql b/02_activities/assignments/assignment1.sql index 2e89fa7af..41871dcd1 100644 --- a/02_activities/assignments/assignment1.sql +++ b/02_activities/assignments/assignment1.sql @@ -5,20 +5,33 @@ --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. */ --- option 1 +-- option 1 + +--OR +SELECT * +FROM customer_purchases +WHERE product_id = 4 OR product_id = 9; -- option 2 +--IN +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), @@ -28,10 +41,19 @@ filtered by vendor IDs between 8 and 10 (inclusive) using either: */ -- option 1 +--AND +SELECT *, + quantity * cost_to_customer_per_qty AS price +FROM customer_purchases +WHERE vendor_id >= 8 AND vendor_id <= 10; -- option 2 - +--BETWEEN +SELECT *, + quantity * cost_to_customer_per_qty AS price +FROM customer_purchases +WHERE vendor_id BETWEEN 8 AND 10; --CASE /* 1. Products can be sold by the individual unit or by bulk measures like lbs. or oz. @@ -39,19 +61,41 @@ Using the product table, write a query that outputs the product_id and product_n 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 * +FROM vendor +INNER JOIN vendor_booth_assignments + ON vendor.vendor_id = vendor_booth_assignments.vendor_id +ORDER BY vendor.vendor_name, vendor_booth_assignments.market_date; /* SECTION 3 */ @@ -60,7 +104,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 sticker to everyone who has ever spent more than $2000 at the market. Write a query that generates a list @@ -68,6 +116,17 @@ 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 c +JOIN customer_purchases 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 @@ -82,7 +141,15 @@ When inserting the new vendor, you need to appropriately align the columns to be VALUES(col1,col2,col3,col4,col5) */ +DROP TABLE IF EXISTS temp.new_vendor; + +CREATE TABLE temp.new_vendor AS +SELECT * FROM vendor; + +ALTER TABLE temp.new_vendor ADD COLUMN vendor_description TEXT; +INSERT INTO temp.new_vendor (vendor_id, vendor_name, vendor_description, vendor_owner_first_name, vendor_owner_last_name) +VALUES (10, 'Thomass Superfood Store', 'Fresh Focused store', 'Thomas', 'Rosenthal'); -- Date /*1. Get the customer_id, month, and year (in separate columns) of every purchase in the customer_purchases table. From c8af238a075332d7fe23e0ced150e23e7c61b646 Mon Sep 17 00:00:00 2001 From: Simeon Date: Sun, 27 Apr 2025 18:15:00 -0400 Subject: [PATCH 2/3] added sql assignment and erd diagram --- .../assignments/SLbookstore.drawio.png | Bin 0 -> 101446 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 02_activities/assignments/SLbookstore.drawio.png diff --git a/02_activities/assignments/SLbookstore.drawio.png b/02_activities/assignments/SLbookstore.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..8baf0d7590845ab9648d580e7989962c5c68b5f7 GIT binary patch literal 101446 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 literal 0 HcmV?d00001 From bb9e7883128101abfae6dbb68cdc61110fd074cd Mon Sep 17 00:00:00 2001 From: Simeon Date: Sun, 27 Apr 2025 22:09:53 -0400 Subject: [PATCH 3/3] Add correct assignment2.sql file --- 02_activities/assignments/assignment2.sql | 134 ++++++++++++++++++++-- 1 file changed, 127 insertions(+), 7 deletions(-) diff --git a/02_activities/assignments/assignment2.sql b/02_activities/assignments/assignment2.sql index 5ad40748a..ba821e117 100644 --- a/02_activities/assignments/assignment2.sql +++ b/02_activities/assignments/assignment2.sql @@ -20,6 +20,9 @@ The `||` values concatenate the columns into strings. Edit the appropriate columns -- you're making two edits -- and the NULL rows will be fixed. All the other rows will remain the same.) */ +SELECT + product_name || ', ' || COALESCE(product_size, '') || ' (' || COALESCE(product_qty_type, 'unit') || ')' +FROM product; --Windowed Functions @@ -32,18 +35,40 @@ each new market date for each customer, or select only the unique market dates p (without purchase details) and number those visits. HINT: One of these approaches uses ROW_NUMBER() and one uses DENSE_RANK(). */ - +SELECT + customer_id, + market_date, + DENSE_RANK() OVER (PARTITION BY customer_id ORDER BY market_date) AS visit_number +FROM ( + SELECT DISTINCT customer_id, market_date + FROM customer_purchases +) AS unique_visits; /* 2. Reverse the numbering of the query from a part so each customer’s most recent visit is labeled 1, then write another query that uses this one as a subquery (or temp table) and filters the results to only the customer’s most recent visit. */ - +FROM ( + SELECT + customer_id, + market_date, + DENSE_RANK() OVER (PARTITION BY customer_id ORDER BY market_date DESC) AS visit_number + FROM ( + SELECT DISTINCT customer_id, market_date + FROM customer_purchases + ) AS unique_visits +) AS ranked_visits +WHERE visit_number = 1; /* 3. Using a COUNT() window function, include a value along with each row of the customer_purchases table that indicates how many different times that customer has purchased that product_id. */ - +SELECT + customer_id, + product_id, + market_date, + COUNT(*) OVER (PARTITION BY customer_id, product_id) AS customer_product_purchase_count +FROM customer_purchases; -- String manipulations /* 1. Some product names in the product table have descriptions like "Jar" or "Organic". @@ -57,11 +82,22 @@ 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. */ - +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; /* 2. Filter the query to show any product_size value that contain a number with REGEXP. */ - +SELECT + product_name, + product_size +FROM product +WHERE product_size GLOB '*[0-9]*'; -- UNION /* 1. Using a UNION, write a query that displays the market dates with the highest and lowest total sales. @@ -73,7 +109,37 @@ HINT: There are a possibly a few ways to do this query, but if you're struggling 3) Query the second temp table twice, once for the best day, once for the worst day, with a UNION binding them. */ +WITH sales_by_date AS ( + SELECT + market_date, + SUM(quantity * cost_to_customer_per_qty) AS total_sales + FROM customer_purchases + GROUP BY market_date +), +ranked_sales AS ( + SELECT + market_date, + total_sales, + RANK() OVER (ORDER BY total_sales DESC) AS best_rank, + RANK() OVER (ORDER BY total_sales ASC) AS worst_rank + FROM sales_by_date +) +SELECT + market_date, + total_sales, + 'Best Day' AS day_type +FROM ranked_sales +WHERE best_rank = 1 + +UNION + +SELECT + market_date, + total_sales, + 'Worst Day' AS day_type +FROM ranked_sales +WHERE worst_rank = 1; /* SECTION 3 */ @@ -89,6 +155,23 @@ Think a bit about the row counts: how many distinct vendors, product names are t How many customers are there (y). Before your final group by you should have the product of those two queries (x*y). */ +WITH vendor_products AS ( + SELECT + v.vendor_name, + p.product_name, + vi.original_price + FROM vendor_inventory vi + JOIN vendor v ON vi.vendor_id = v.vendor_id + JOIN product p ON vi.product_id = p.product_id +) + +SELECT + vendor_name, + product_name, + SUM(5 * original_price) AS total_revenue +FROM vendor_products +CROSS JOIN customer +GROUP BY vendor_name, product_name; -- INSERT @@ -97,18 +180,42 @@ 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`. */ - +CREATE TABLE product_units AS +SELECT + *, + CURRENT_TIMESTAMP AS snapshot_timestamp +FROM product +WHERE product_qty_type = 'unit'; /*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). */ - +INSERT INTO product_units ( + product_id, + product_name, + product_size, + product_category_id, + product_qty_type, + snapshot_timestamp +) +VALUES ( + 999, -- New unique product_id + 'Apple Pie Supreme', + '1 unit', + 3, -- Category 3 (since it exists) + 'unit', + CURRENT_TIMESTAMP +); -- DELETE /* 1. Delete the older record for the whatever product you added. HINT: If you don't specify a WHERE clause, you are going to have a bad time.*/ +SELECT * FROM product_units WHERE product_name LIKE '%Apple Pie%'; + +DELETE FROM product_units +WHERE product_name = 'Apple Pie'; -- UPDATE @@ -128,6 +235,19 @@ 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. */ +ALTER TABLE product_units +ADD current_quantity INT; + +UPDATE product_units +SET current_quantity = COALESCE(( + SELECT vi.quantity + FROM vendor_inventory vi + WHERE vi.product_id = product_units.product_id + ORDER BY vi.market_date DESC + LIMIT 1 +), 0); + +