From e2621eea4dfc9771ee0a4f361a5c4391948b07cb Mon Sep 17 00:00:00 2001 From: atefehsafarkhah <50791492+atefehsafarkhah@users.noreply.github.com> Date: Tue, 17 Dec 2024 10:11:18 +0000 Subject: [PATCH 1/2] joins --- .vscode/settings.json | 1 - Scripts/Query1.sql | 0 Scripts/query.sql | 53 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 Scripts/Query1.sql create mode 100644 Scripts/query.sql diff --git a/.vscode/settings.json b/.vscode/settings.json index 9bc98c8..20de972 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -18,7 +18,6 @@ "screencastMode.onlyKeyboardShortcuts": true, "terminal.integrated.fontSize": 18, "window.zoomLevel": 3, - "workbench.activityBar.visible": true, "workbench.colorTheme": "Default Light+", "workbench.fontAliasing": "antialiased", "workbench.statusBar.visible": true, diff --git a/Scripts/Query1.sql b/Scripts/Query1.sql new file mode 100644 index 0000000..e69de29 diff --git a/Scripts/query.sql b/Scripts/query.sql new file mode 100644 index 0000000..7fa1525 --- /dev/null +++ b/Scripts/query.sql @@ -0,0 +1,53 @@ +SELECT * +FROM employee +LIMIT 5; +Go +SELECT * +FROM model +LIMIT 5; + +SELECT sql +FROM sqlite_schema +WHERE name= 'employee'; + +# Make a list of employees and their immediate managers +SELECT emp.firstName AS employee_first_name,emp.lastName AS employee_last_name,emp.title, + mng.firstName AS manager_first_name,mng.lastName AS manager_last_name +FROM employee e +INNER JOIN employee mng +ON emp.managerId = mng.employeeId; + +#Find salespeople who have zero sales +SELECT emp.firstName, emp.lastName +FROM employee emp +LEFT JOIN sales s ON emp.employeeId = sls.employeeId +WHERE emp.title= 'Sales Person' AND salesAmount ISNULL; + +#List all customers and their sales, even if some data is gone +SELECT cus.firstName, cus.lastName, sls.salesAmount +FROM customer cus +INNER JOIN sales sls + ON cus.customerId = sls.customerId +UNION +-- UNION WITH CUSTOMERS WHO HAVE NO SALES +SELECT cus.firstName, cus.lastName,sls.salesAmount +FROM customer cus +LEFT JOIN sales sls + ON cus.customerId = sls.customerId +WHERE sls.salesId IS NULL +UNION +-- UNION WITH SALES MISSING CUSTOMER DATA +SELECT cus.firstName, cus.lastName, sls.salesAmount +FROM sales sls +LEFT JOIN customer cus + ON cus.customerId = sls.customerId +WHERE cus.customerId IS NULL; + +#another optimized and cleaner way: +SELECT + COALESCE(cus.firstName, 'N/A') AS firstName, + COALESCE(cus.lastName, 'N/A') AS lastName, + COALESCE(sls.salesAmount, 0) AS salesAmount +FROM customer cus +FULL OUTER JOIN sales sls + ON cus.customerId = sls.customerId; From e22f9df138f781e62f1bd4642ed00dae90b9324e Mon Sep 17 00:00:00 2001 From: atefehsafarkhah <50791492+atefehsafarkhah@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:20:05 +0000 Subject: [PATCH 2/2] Grouping --- Scripts/Query1.sql | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Scripts/Query1.sql b/Scripts/Query1.sql index e69de29..0855593 100644 --- a/Scripts/Query1.sql +++ b/Scripts/Query1.sql @@ -0,0 +1,22 @@ +#How many cars have been sold per employee? +SELECT emp.employeeId ,emp.firstName,emp.lastName, COUNT(sls.salesAmount) totalSale +FROM sales sls +JOIN employee emp ON sls.employeeId = emp.employeeId +GROUP BY emp.employeeId +ORDER BY 4 DESC ; +#Find the least and most expensive car sold by each employee +SELECT emp.employeeId ,emp.firstName,emp.lastName, MIN(sls.salesAmount) minSale, MAX(sls.salesAmount) maxSale +FROM sales sls +JOIN employee emp ON sls.employeeId = emp.employeeId +GROUP BY emp.employeeId ; + +#Display a report for employees who have sold more than five cars +SELECT emp.employeeId empId, emp.firstName empFirstName, emp.lastName empLastName, COUNT(sls.salesAmount) sales_count +FROM employee emp +JOIN sales sls ON emp.employeeId=sls.employeeId +GROUP BY 1,2,3 +HAVING COUNT(sls.salesAmount)> 5 +ORDER BY 4 DESC; + + +