From cc612290d36faa49ff2f9089a8313eed6645ea78 Mon Sep 17 00:00:00 2001 From: LSYearwood <70383000+LSYearwood@users.noreply.github.com> Date: Mon, 11 Aug 2025 21:03:45 -0400 Subject: [PATCH 1/3] Completed assignment one - includes a pdf of the ERDs --- 02_activities/assignments/ERDs.pdf | Bin 0 -> 62529 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 02_activities/assignments/ERDs.pdf diff --git a/02_activities/assignments/ERDs.pdf b/02_activities/assignments/ERDs.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8d5207e605d0d6f2cb6f443bf8e9963e8ff4f8cd GIT binary patch literal 62529 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 O@|p(%<%0j^_5T9ZiNNmw literal 0 HcmV?d00001 From 1b0e52da77621425b974aee6a05adb4b47dc1f06 Mon Sep 17 00:00:00 2001 From: LSYearwood <70383000+LSYearwood@users.noreply.github.com> Date: Wed, 13 Aug 2025 13:58:08 -0400 Subject: [PATCH 2/3] Trying again to push the code --- 02_activities/assignments/assignment1.sql | 61 ++++++++++++++++++++--- 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/02_activities/assignments/assignment1.sql b/02_activities/assignments/assignment1.sql index 2e89fa7af..6481202d3 100644 --- a/02_activities/assignments/assignment1.sql +++ b/02_activities/assignments/assignment1.sql @@ -5,21 +5,25 @@ --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 +select * from customer_purchases where product_id = 4 or product_id = 9; -- option 2 - +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 vendor IDs between 8 and 10 (inclusive) using either: @@ -28,10 +32,13 @@ filtered by vendor IDs between 8 and 10 (inclusive) using either: */ -- option 1 +select *, (quantity * cost_to_customer_per_qty) as price from customer_purchases +where vendor_id >= 8 and vendor_id <= 10; -- option 2 - +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 +46,36 @@ 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 v +inner join vendor_booth_assignments vba on v.vendor_id = vba.vendor_id +order by v.vendor_name, vba.market_date; /* SECTION 3 */ @@ -60,6 +84,9 @@ 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 @@ -68,6 +95,14 @@ 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,6 +117,12 @@ When inserting the new vendor, you need to appropriately align the columns to be VALUES(col1,col2,col3,col4,col5) */ +create table temp.new_vendor as +select * from vendor; + +insert into temp.new_vendor (vendor_id, vendor_name, vendor_type, vendor_owner_first_name, vendor_owner_last_name) +values (10, 'Thomass Superfood Store', 'Fresh Focused store', 'Thomas', 'Rosenthal'); + -- Date @@ -90,7 +131,10 @@ VALUES(col1,col2,col3,col4,col5) 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. Remember that money spent is quantity*cost_to_customer_per_qty. @@ -98,3 +142,8 @@ 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('%Y', market_date) = '2022' + and strftime('%m', market_date) = '04' +group by customer_id; From f8cb6cc6185a8731441e9333651cfd49370b8c32 Mon Sep 17 00:00:00 2001 From: LSYearwood <70383000+LSYearwood@users.noreply.github.com> Date: Sun, 17 Aug 2025 21:46:17 -0400 Subject: [PATCH 3/3] Completed Assignment Two --- 02_activities/assignments/assignment2.sql | 91 ++++++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/02_activities/assignments/assignment2.sql b/02_activities/assignments/assignment2.sql index 5ad40748a..4c219b434 100644 --- a/02_activities/assignments/assignment2.sql +++ b/02_activities/assignments/assignment2.sql @@ -20,6 +20,13 @@ 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 * from product +where product_size is null or product_qty_type is null; + +select product_name || ', ' || + coalesce(product_size, '') || ' (' || + coalesce(product_qty_type, 'unit') || ')' as formatted_product +from product; --Windowed Functions @@ -32,17 +39,37 @@ 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, + row_number() over ( + partition by customer_id + order by market_date + ) as visit_number +from customer_purchases; /* 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. */ +select * from ( + select customer_id, market_date, + row_number() over ( + partition by customer_id + order by market_date desc + ) AS visit_number + from customer_purchases +) 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, quantity, cost_to_customer_per_qty, + count(*) over ( + partition by customer_id, product_id + ) as times_purchased +from customer_purchases; -- String manipulations @@ -57,10 +84,18 @@ 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_id, product_name, + trim(substr( + product_name, + instr(product_name, '-') + 1 + )) as description +from product; /* 2. Filter the query to show any product_size value that contain a number with REGEXP. */ +select product_id, product_name, product_size from product +where product_size regexp '[0-9]'; -- UNION @@ -73,6 +108,26 @@ 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. */ +-- Get highest and lowest sales days +select market_date, total_sales from ( + select + market_date, + SUM(quantity * cost_to_customer_per_qty) as total_sales + from customer_purchases + group by market_date + order by total_sales desc + limit 1 +) +union +select market_date, total_sales from ( + select + market_date, + SUM(quantity * cost_to_customer_per_qty) as total_sales + from customer_purchases + group by market_date + order by total_sales asc + limit 1 +); @@ -89,6 +144,13 @@ 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). */ +select v.vendor_name, p.product_name, + count(distinct c.customer_id) * 5 * vi.original_price as total_revenue +from vendor_inventory vi +cross join customer c +join vendor v on vi.vendor_id = v.vendor_id +join product p on vi.product_id = p.product_id +group by v.vendor_name, p.product_name, vi.original_price; -- INSERT @@ -97,18 +159,30 @@ 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 the new table with the extra column +create table product_units as +select product_id, product_name, product_size, product_qty_type, + product_category_id, 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_qty_type, + product_category_id, snapshot_timestamp +) +values (999, 'Apple Pie', '12"', '3', '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.*/ - +delete from product_units +where product_name = 'apple pie' and snapshot_timestamp is null; -- UPDATE @@ -128,6 +202,21 @@ 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 T1.quantity + from vendor_inventory as T1 + where T1.product_id = product_units.product_id + and T1.market_date = ( + select MAX(T2.market_date) + from vendor_inventory as T2 + where T2.product_id = product_units.product_id + ) + ), 0 +);