From f0b88bd388a10fec4ab14f971d3974525ea6c6af Mon Sep 17 00:00:00 2001 From: Khoren Date: Sat, 19 Apr 2025 13:49:27 -0400 Subject: [PATCH] assignment1.sql and logical_model.jpg for submission --- 02_activities/assignments/assignment1.sql | 76 +++++++++++++++++--- 02_activities/assignments/logical_model.jpg | Bin 0 -> 18851 bytes 2 files changed, 66 insertions(+), 10 deletions(-) create mode 100644 02_activities/assignments/logical_model.jpg diff --git a/02_activities/assignments/assignment1.sql b/02_activities/assignments/assignment1.sql index 2e89fa7af..19aae4324 100644 --- a/02_activities/assignments/assignment1.sql +++ b/02_activities/assignments/assignment1.sql @@ -4,21 +4,29 @@ --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 IN (4, 9); -- option 2 - +SELECT * +FROM customer_purchases +WHERE product_id = 4 OR product_id = 9; /*2. Write a query that returns all customer purchases and a new calculated column 'price' (quantity * cost_to_customer_per_qty), @@ -27,10 +35,16 @@ filtered by vendor IDs between 8 and 10 (inclusive) using either: 2. one condition using BETWEEN */ -- 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 @@ -39,19 +53,39 @@ 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 vb + ON v.vendor_id = vb.vendor_id +ORDER BY v.vendor_name, vb.market_date; /* SECTION 3 */ @@ -59,7 +93,10 @@ vendor_id field they both have in common, and sorts the result by vendor_name, t -- AGGREGATE /* 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_rentals +FROM vendor_booth_assignments +GROUP BY vendor_id; /* 2. The Farmer’s Market Customer Appreciation Committee wants to give a bumper @@ -68,7 +105,16 @@ 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 +HAVING total_spent > 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: @@ -81,6 +127,16 @@ When inserting the new vendor, you need to appropriately align the columns to be -> To insert the new row use VALUES, specifying the value you want for each column: VALUES(col1,col2,col3,col4,col5) */ +DROP TABLE IF EXISTS new_vendor; + +CREATE TEMP TABLE new_vendor AS +SELECT * FROM vendor; + +INSERT INTO new_vendor +VALUES (10, 'Thomass Superfood Store', 'Fresh Focused', 'Thomas Rosenthal', NULL); + + + diff --git a/02_activities/assignments/logical_model.jpg b/02_activities/assignments/logical_model.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c2527993442404fa731a31d70615380e159befc GIT binary patch literal 18851 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
n5=>_Y?<`U&008T_rq##nBWo~yioC{;zMYB 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