我对创建过程非常陌生,正在寻找有关我的代码的一些指导。我无法弄清楚如何输出被指导的学生人数。我试图输出以下语句:创建一个名为 MentoringCount 的存储过程,它将显示教授姓名和他/她正在指导的学生人数。按教授姓名对输出进行排序。
delimiter //
create procedure MentoringCount()
Begin
SELECT p.ProfessorName from professor p
join lab10.student_professor SP
on (S.studentno = SP.studentno)
where SP.mentored = 1
SELECT COUNT (Mentor)
FROM student_professor
order by p.ProfessorName;
END //
Delimiter ;
call mentoredStudents();
学生表:
studentno
studentprogram
phoneno
age
firstname
lastname
教授表:
ProfessorId
ProfessorProgram
PhoneNo
Age
ProfessorName
student_professor 表:
student_professor_id
ProfessorId
StudentNo
Mentor
答案 0 :(得分:1)
在存储过程中执行此查询和在正常情况下执行此查询没有区别。
您只需要连接表并使用 COUNT(*)
和 GROUP BY
。使用 LEFT JOIN
这样您将获得零计数。
delimiter //
CREATE PROCEDURE MentoringCount()
BEGIN
SELECT p.professorName, IFNULL(COUNT(sp.student_professor_id), 0) AS students
FROM professor AS p
LEFT JOIN student_professor AS sp
ON sp.professorID = p.professorID AND sp.Mentored = 1
GROUP BY p.professorID
ORDER BY p.professorName
END;
//