我想创建一个存储过程,它接受球队名称和年份,并返回该特定球队在该特定年份的球员人数。我正在使用 MYSQL,下面列出了我正在使用的表:
Person (personID, name, phone, email, year)
Player (personID, dateOfBirth, school)
playerTeam (personID, teamID)
Team (teamID, teamName, ageGroup)
到目前为止,我已经尝试加入表并仅在 teamName 和 Person.year = 输入参数的情况下计算 personID 但无济于事。有什么想法吗?
提交这个问题后,通过反复试验,我能够使用以下语句让它工作:
DELIMITER //
CREATE PROCEDURE teamSize (IN team VARCHAR (30), IN YEAR INT)
BEGIN
SELECT
COUNT(Person.personID) NumOfPlayers
FROM
Person AS p,
Player,
playerTeam,
Team
WHERE Person.personID = Player.personID
AND Player.personID = playerTeam.personID
AND Team.teamID = playerTeam.teamID
AND Team.teamName = team
AND Person.year = YEAR ;
END //
DELIMITER ;
CALL teamSize('Pirates', 1991);
有没有办法使用连接等来简化这个,因为目前它有点困惑。
最佳答案
我不确定你是否想要这样:
DELIMITER //
CREATE PROCEDURE GetPlayerCount (
IN oTeamName VARCHAR (50),
IN oYear INT
) AS
BEGIN
SELECT
COUNT(a.PersonID) NoOfPlayers
FROM
Person a
INNER JOIN PlayerTeam b
ON a.PersonID = b.PersonID
INNER JOIN Team c
ON b.TeamID = c.TeamID
WHERE b.TeamName = oTeamName
AND a.Year = oYear ;
END //
DELIMITER ;
但我认为这是你想要的。
用法:
CALL GetPlayerCount('TeamDog', 2012);
关于mysql - 使用存储过程计算团队中的人数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10713140/