-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathExercise_Five.sql
More file actions
152 lines (128 loc) · 4.12 KB
/
Exercise_Five.sql
File metadata and controls
152 lines (128 loc) · 4.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
-- Problem 1
SELECT COUNT(InstructorID) AS NumberInstructors, AVG(AnnualSalary) AS AverageSalary
FROM Instructors
WHERE Status = 'F';
-- Problem 2
SELECT DepartmentName, COUNT(InstructorID) AS InstructorCount, MAX(AnnualSalary) AS MaxSalary
FROM Departments
JOIN Instructors
ON Departments.DepartmentID = Instructors.DepartmentID
GROUP BY DepartmentNAme
ORDER BY InstructorCount DESC;
-- Problem 3
SELECT CONCAT(FirstName, ' ', LastName) AS InstructorName, Count(CourseID) AS ClassCount
FROM Instructors
JOIN Courses
ON Courses.InstructorID = Instructors.InstructorID
GROUP BY CONCAT(FirstName, ' ', LastName)
ORDER BY ClassCount DESC;
-- Problem 4
SELECT DepartmentName, CourseDescription, COUNT(StudentID) AS StudentCount
FROM Courses
JOIN Departments
ON Courses.DepartmentID = Department.DepartmentID
LEFT JOIN StudentCourses
ON StudentCourses.CourseID = Courses.CourseID
GROUP BY DepartmentName, Courses.CourseDescription
ORDER BY DepartmentName, StudentCount DESC;
-- Problem 5
SELECT Students.StudentID, COUNT(CourseID) AS CourseCount
FROM Students
JOIN StudentCourses
ON Students.StudentID = StudentCourses.StudentID
GROUP BY Students.StudentID
ORDER BY CourseCount DESC;
-- Problem 6
SELECT Student.StudentID, COUNT(Courses.CourseID) AS CourseCount
FROM Students
JOIN StudentCourses
ON Students.StudentID = StudentCourses.StudentID
JOIN Courses
ON StudentCourses.CourseID = Courses.CourseID
GROUP BY Students.StudentID
ORDER BY Students.StudentID;
-- Problem 7
SELECT Inst.InstructorName, COUNT(Courses.CourseID) AS CoursesTaught
FROM Courses
LEFT JOIN (
SELECT CONCAT(LastName, ', ', FirstName) AS InstructorName, InstructorID
FROM Instructors
WHERE Instuctors.Status = 'P') AS Inst
ON Inst.InstructorID = Course.InstructorID
WHERE InstructorName IS NOT NULL
GROUP BY Inst.InstructorName;
-- Problem 8
SELECT LastName, FirstName
FROM Instructors
WHERE InstructorID IN (
SELECT DISTINCT InstructorID
FROM Courses)
ORDER BY LastName, FirstName;
-- Problem 9
SELECT LastName, FirstName, AnnualSalary
FROM Instructors
WHERE AnnaulSalary > (
SELECT AVG(AnnualSalary)
FROM Instructors)
ORDER BY AnnualSalary DESC;
-- Problem 10
SELECT LastName, FirstName
FROM Instructors
WHERE NOT EXISTS (
SELECT *
FROM Courses
WHERE InstructorID = Instructors.InstructorID)
ORDER BY LastName, FirstName;
- Problem 11
SELECT LastName, FirstName, COUNT(*) AS Number of Courses
FROM Students
JOIN StudentCourses
ON Students.StudentID = StudentCourses.StudentID
WHERE StudentCourses.StudentID IN (
SELECT StudentID
FROM StudentCourses
JOIN Courses
ON StudentCourses.CourseID = Courses.CourseID
GROUP BY StudentID
HAVING COUNT(*) > 1)
GROUP BY LastName, FirstName
ORDER BY LastName, FirstName;
-- Problem 12
SELECT LastName, FirstName, AnnualSalary
FROM Instructors
WHERE AnnualSalary NOT IN (
SELECT AnnualSalary
FROM Instructors
GROUP BY AnnualSalary
HAVING COUNT(AnnualSalary) > 1)
ORDER BY LastName, FirstName;
-- Problem 13
WITH CourseSummary AS (
SELECT CoursesSub.CourseID, MAX(EnrillmentDate) AS MaxEnrollmentDate
FROM Courses CoursesSub
JOIN StudentCourses StuCorSub
ON CoursesSub.CourseID = StuCorSub.CourseID
JOIN Students StuSub
ON StuCorSub.StudentID = StuSub.StudentID
GROUP BY CoursesSub.CourseID)
SELECT CourseDescription, LastName, FirstName, EnrollmentDate
FROM Courses CoursesMain
JOIN StudentCourses StuCorMain
ON CoursesMain.CourseID = StuCorMain.CourseID
JOIN Students StuMain
ON StuCorMain.StudentID = StuMain.StudentID
JOIN CourseSummary CorSumMain
ON CoursesMain.CourseID = CorSumMain.CourseID AND StuMain.EnrollmentDate = CorSumMain.MaxEnrollmentDate;
-- Problem 14
WITH UnitsSummary AS (
SELECT Students.StudentID, COUNT(CourseUnits) AS TotalUnits
FROM Students
JOIN StudentCourses
ON Students.StudentID = StudentCourses.StudentID
JOIN Courses
ON StudentCourses.CourseID = Courses.CourseID
GROUP BY Student.StudentID
HAVING SUM(CourseUnits) > 9)
SELECT StudentID, TotalUnits, FullTimeCost + (TotalUnits * PerUnitCost) AS Tuition
FROM UnitsSummary
CROSS JOIN Tuition;