diff --git a/Scripts/ali-haider-01.sql b/Scripts/ali-haider-01.sql new file mode 100644 index 0000000..1dd5810 --- /dev/null +++ b/Scripts/ali-haider-01.sql @@ -0,0 +1,12 @@ +select sql FROM sqlite_schema where name = "employee"; + +select * from model m order by m.modelId desc LIMIT 10; + +SELECT * FROM employee e LIMIT 10; +SELECT count(e.employeeId) FROM employee e; + +SELECT * FROM employee e LIMIT 10; +SELECT * FROM sales s LIMIT 10; +SELECT * FROM customer c LIMIT 10; +SELECT * FROM model m LIMIT 10; +SELECT * FROM inventory i LIMIT 10; diff --git a/Scripts/p00-start.sql b/Scripts/p00-start.sql new file mode 100644 index 0000000..00b41b8 --- /dev/null +++ b/Scripts/p00-start.sql @@ -0,0 +1,4 @@ +select e.firstName, e.lastName, e.title, m.firstName as 'Manager First Name', m.lastName as 'Manager Last Name' +from employee e +INNER JOIN employee m +ON e.managerId = m.employeeId; \ No newline at end of file diff --git a/Scripts/p01-joins.sql b/Scripts/p01-joins.sql new file mode 100644 index 0000000..f41fa86 --- /dev/null +++ b/Scripts/p01-joins.sql @@ -0,0 +1,7 @@ +select e.firstName, e.lastName, e.title, m.firstName as 'Manager First Name', +m.lastName as 'Manager Last Name' +FROM employee e +INNER JOIN employee m +ON e.managerId = m.employeeId; + +SELECT * FROM employee; \ No newline at end of file diff --git a/Scripts/p02-joins.sql b/Scripts/p02-joins.sql new file mode 100644 index 0000000..eadfebc --- /dev/null +++ b/Scripts/p02-joins.sql @@ -0,0 +1,9 @@ +select * from sales limit 10; + +select e.firstName, e.lastName, count(s.salesId) as 'totalSales' +from employee e +LEFT JOIN sales s ON s.employeeId = e.employeeId +where e.title = 'Sales Person' +group BY e.employeeId +having totalSales = 0 +order by totalSales DESC; \ No newline at end of file diff --git a/Scripts/p03-joins.sql b/Scripts/p03-joins.sql new file mode 100644 index 0000000..4dd52cd --- /dev/null +++ b/Scripts/p03-joins.sql @@ -0,0 +1,16 @@ +select * from customer; +select * from sales limit 10; + +SELECT c.firstName, c.lastName, c.email, s.salesAmount, s.soldDate +FROM customer c +INNER JOIN sales s ON s.customerId = c.customerId +UNION +SELECT c.firstName, c.lastName, c.email, s.salesAmount, s.soldDate +FROM customer c +LEFT JOIN sales s ON s.customerId = c.customerId +WHERE s.salesId is null +UNION +SELECT c.firstName, c.lastName, c.email, s.salesAmount, s.soldDate +FROM sales s +LEFT JOIN customer c ON s.customerId = c.customerId +WHERE c.customerId is null; diff --git a/Scripts/p04-grouping.sql b/Scripts/p04-grouping.sql new file mode 100644 index 0000000..f6ad413 --- /dev/null +++ b/Scripts/p04-grouping.sql @@ -0,0 +1,5 @@ +select e.employeeId, e.firstName, e.lastName, count(s.salesId) as 'totalSales' +from sales s +INNER join employee e on e.employeeId = s.employeeId +group by s.employeeId, e.firstName, e.lastName +order by totalSales desc; \ No newline at end of file diff --git a/Scripts/p05-grouping.sql b/Scripts/p05-grouping.sql new file mode 100644 index 0000000..4ba2587 --- /dev/null +++ b/Scripts/p05-grouping.sql @@ -0,0 +1,18 @@ + + select s.employeeId, e.firstName, e.lastName, MAX(s.salesAmount) as 'saleAmount' + from sales s + inner join employee e on e.employeeId = s.employeeId + group by s.employeeId + UNION + select s.employeeId, e.firstName, e.lastName, MIN(s.salesAmount) as 'saleAmount' + from sales s + inner join employee e on e.employeeId = s.employeeId + group by s.employeeId + order by saleAmount desc; + + select s.employeeId, e.firstName, e.lastName, + MAX(s.salesAmount) as 'highestSale', MIN(s.salesAmount) as 'lowestAmount' + from sales s + inner join employee e on e.employeeId = s.employeeId + where s.soldDate >= date('now', 'start of year') + group by s.employeeId; \ No newline at end of file diff --git a/Scripts/p06-grouping.sql b/Scripts/p06-grouping.sql new file mode 100644 index 0000000..88748c1 --- /dev/null +++ b/Scripts/p06-grouping.sql @@ -0,0 +1,6 @@ +select e.employeeId, e.firstName, e.lastName, count(s.salesId) as 'totalSales' +from employee e +INNER JOIN sales s ON e.employeeId = s.salesId +GROUP by s.employeeId +having totalSales >= 5 +order by totalSales desc; \ No newline at end of file diff --git a/Scripts/p07-advanced.sql b/Scripts/p07-advanced.sql new file mode 100644 index 0000000..113910a --- /dev/null +++ b/Scripts/p07-advanced.sql @@ -0,0 +1,8 @@ +select * from sales s limit 10; + +WITH cte AS ( + SELECT strftime('%Y', s.soldDate) AS 'soldYear', s.salesAmount FROM sales s) +SELECT soldYear, FORMAT("$%.2f", SUM(salesAmount)) as 'AnnualSale' +FROM cte +GROUP BY soldYear +ORDER BY soldYear; \ No newline at end of file diff --git a/Scripts/p08-advanced.sql b/Scripts/p08-advanced.sql new file mode 100644 index 0000000..646c9dd --- /dev/null +++ b/Scripts/p08-advanced.sql @@ -0,0 +1,13 @@ +select * from sales s limit 10; + + +WITH cte AS ( +SELECT s.salesId, s.employeeId, s.soldDate, strftime('%m', s.soldDate) as 'sellingMonth' +from sales s +WHERE s.soldDate BETWEEN date('2021-01-01') and date('2021-12-31')) +SELECT c.employeeId, e.firstName, e.lastName, c.sellingMonth, count(c.salesId) as 'totalSales21' +from cte c +INNER JOIN employee e on e.employeeId = c.employeeId +GROUP BY c.employeeId +ORDER by sellingMonth asc, totalSales21 desc +; \ No newline at end of file diff --git a/Scripts/p09-windows function.sql b/Scripts/p09-windows function.sql new file mode 100644 index 0000000..62fcbba --- /dev/null +++ b/Scripts/p09-windows function.sql @@ -0,0 +1,8 @@ +select e.firstName, e.lastName, e.title, s.salesAmount, m.model, + count(m.model) AS 'totalSold', + rank() OVER (PARTITION BY s.employeeId ORDER BY count(m.model) DESC) AS rank + from employee e + INNER JOIN sales s ON s.employeeId = e.employeeId + INNER JOIN inventory i ON i.inventoryId = s.inventoryId + INNER JOIN model m ON m.modelId = i.modelId + GROUP BY e.firstName, e.lastName, m.model; \ No newline at end of file diff --git a/Scripts/p10-windows function.sql b/Scripts/p10-windows function.sql new file mode 100644 index 0000000..d15089e --- /dev/null +++ b/Scripts/p10-windows function.sql @@ -0,0 +1,12 @@ +WITH CTE AS (select strftime('%Y', s.soldDate) AS soldYear, + strftime('%m', s.soldDate) AS soldMonth, SUM(s.salesAmount) as totalSales + from sales s + GROUP BY soldYear, soldMonth + ORDER BY soldYear, soldMonth) + + SELECT soldYear, soldMonth, totalSales, + SUM(totalSales) + OVER (PARTITION BY soldYear ORDER BY soldYear, soldMonth) + as annualSales + from CTE + ; diff --git a/Scripts/p11-windows function.sql b/Scripts/p11-windows function.sql new file mode 100644 index 0000000..60d7f14 --- /dev/null +++ b/Scripts/p11-windows function.sql @@ -0,0 +1,6 @@ +select strftime('%Y-%m', s.soldDate) as soldMonth, + COUNT(s.salesId) as carsSold, + LAG (count(s.salesId), 1, 0) OVER calMonth as carsSoldLastMonth + from sales s + GROUP BY soldMonth + WINDOW calMonth AS (ORDER BY strftime('%Y-%m', s.soldDate)); \ No newline at end of file