SQL
SQL
6. Display details of students working on more than one project and their
supervisors:
SQL
SELECT GS.Name AS Student_Name, Prof.Name AS Supervisor_Name,
COUNT(DISTINCT P.Project_Number) AS Projects_Worked_On
FROM Graduate_Student GS
INNER JOIN Works_On W ON GS.SSN = W.SSN
INNER JOIN Professor Prof ON W.Project_Number =
Prof.Manages_Project_Number
GROUP BY GS.SSN, Prof.Name
HAVING COUNT(DISTINCT P.Project_Number) > 1;
10. Display the list of students who have the same senior advisor:
SQL
SELECT GS1.Name AS Student_Name, COUNT(*) AS Number_Of_Mentees
FROM Graduate_Student GS1
INNER JOIN Graduate_Student GS2 ON GS1.Senior_Advisor_SSN = GS2.SSN
GROUP BY GS1.Senior_Advisor_SSN, GS1.Name
HAVING COUNT(*) > 1;
11. Display the number of student mentees with each project showing the one
with maximum mentees on top:
SQL
SELECT P.Project_Number, P.Sponsor_Name, COUNT(DISTINCT GS.SSN) AS
Number_Of_Mentees
FROM Project P
INNER JOIN Works_On W ON P.Project_Number = W.Project_Number
INNER JOIN Graduate_Student GS ON W.SSN = GS.SSN
GROUP BY P.Project_Number, P.Sponsor_Name
ORDER BY Number_Of_Mentees DESC;
13. Display the list of students and professors in Marketing and Finance
departments:
SQL
SELECT GS.Name AS Student_Name, Prof.Name AS Professor
Here are the SQL queries for the additional questions you requested:
This query selects all projects where the End_Date year is 2021.
15. Display the most profitable project along with their sponsor and the
associated professor(s) and students:
SQL
WITH MostProfitableProject AS (
SELECT Project_Number, MAX(Budget) AS MaxBudget
FROM Project
)
SELECT P.Project_Number, P.Sponsor_Name, Prof.Name AS PI_Name, GS.Name
AS Student_Name
FROM Project P
INNER JOIN MostProfitableProject MP ON P.Project_Number =
MP.Project_Number
INNER JOIN Professor Prof ON P.PI_SSN = Prof.SSN
INNER JOIN Works_On WO ON P.Project_Number = WO.Project_Number
INNER JOIN Graduate_Student GS ON WO.SSN = GS.SSN
GROUP BY P.Project_Number, P.Sponsor_Name, Prof.Name, GS.Name;
16. Display the number of projects currently running, the most profitable and
the least profitable projects:
SQL
WITH CurrentProjects AS (
SELECT Project_Number
FROM Project
WHERE CURDATE() >= Start_Date AND CURDATE() <= End_Date
)
SELECT (SELECT COUNT(*) FROM CurrentProjects) AS
Current_Projects_Count,
P1.Project_Number AS Most_Profitable_Number, P1.Sponsor_Name AS
Most_Profitable_Sponsor,
P2.Project_Number AS Least_Profitable_Number, P2.Sponsor_Name AS
Least_Profitable_Sponsor
FROM Project P1
INNER JOIN (
SELECT Project_Number, MAX(Budget) AS MaxBudget
FROM Project
GROUP BY Project_Number
) AS MostProfitable ON P1.Project_Number =
MostProfitable.Project_Number
INNER JOIN (
SELECT Project_Number, MIN(Budget) AS MinBudget
FROM Project
GROUP BY Project_Number
) AS LeastProfitable ON P2.Project_Number =
LeastProfitable.Project_Number
INNER JOIN Project P2 ON P2.Project_Number =
LeastProfitable.Project_Number;
17. List the projects whose budget is more than the average project budget:
SQL
WITH AvgBudget AS (
SELECT AVG(Budget) AS AverageBudget
FROM Project
)
SELECT P.Project_Number, P.Sponsor_Name, P.Budget
FROM Project P
INNER JOIN AvgBudget AB ON P.Budget > AB.AverageBudget;
18. Display the details of department whose professors have the maximum
projects:
SQL
WITH ProfessorProjects AS (
SELECT Prof.SSN, Dept.Dept_Name, COUNT(*) AS Project_Count
FROM Professor Prof
INNER JOIN Works_On WO ON Prof.SSN = WO.SSN
INNER JOIN Department Dept ON Prof.SSN = Dept.Chairman_SSN
GROUP BY Prof.SSN, Dept.Dept_Name
)
SELECT *
FROM ProfessorProjects
WHERE Project_Count = (
SELECT MAX(Project_Count)
FROM ProfessorProjects
);
20. Display the list of students who are not assigned any projects or working
on 2 projects:
SQL
WITH StudentProjects AS (
SELECT SSN, COUNT(*) AS Project_Count
FROM Works_On
GROUP BY SSN
)
SELECT GS.SSN, GS.Name
FROM Graduate_Student GS
LEFT JOIN StudentProjects SP ON GS.SSN = SP.SSN
WHERE SP.Project_Count IS NULL OR SP.Project_Count = 2;