gpt4 book ai didi

mysql - 如何使用存储过程更新另一个表中的所有列和行

转载 作者:行者123 更新时间:2023-11-29 09:43:55 28 4
gpt4 key购买 nike

我有一所大学的几张 table 。

Apply (sID int(3), cName varchar(20), major varchar(20), decision char(1))
College (cName char(20), state char(2), enrollment int(11))
Student (sid char(6), sName char(20), GPA decimal(3,2), sizeHS int(11))

我创建了这个表:

CollegeStats (cName varchar(20), appCount int(11), minGPA decimal(3,2), maxGPA decimal(3,2))

我需要创建一个更新 CollegeStats 的存储过程,不带基于 ApplyCollegeStudent< 的参数表。

我对代码进行了多次迭代,试图找到答案,这是我最新的一次。我真的很感激任何和所有的帮助。

此过程没有参数。

例程名称:updateCollegeStatsAll

BEGIN
UPDATE CollegeStats
SET appCount = (SELECT COUNT(*) FROM Apply),
minGPA = (SELECT MIN(GPA) FROM Student),
maxGPA = (SELECT MAX(GPA) FROM Student);
END

当我运行此代码时,它会将所有行更新为相同。

cName   appCount    minGPA  maxGPA  
-----------------------------------
Cornell 20 2.90 4.00
MIT 20 2.90 4.00
CALTEC 20 2.90 4.00
Davis 20 2.90 4.00

最佳答案

数据应该只存在于宇宙中的一处。拥有存储过程汇总数据是一个坏主意。 View 更适合解决这个问题。

所有表都应该有一个 ID 列。从您的问题中不确定这些表如何相互关联。但如果您有 ID 列,您的 View 将如下所示:

CREATE VIEW vCollageStats AS
(
SELECT c.cName,
COUNT(DISTINCT a.Id) AS AppCount,
MIN(s.GPA) AS MinGPA,
MAX(s.GPA) AS MaxGPA
FROM College c
LEFT JOIN Apply a
ON c.Id = a.CollegeId
LEFT JOIN Student s
ON a.StudentId = s.Id
GROUP BY c.cName,

)

关于mysql - 如何使用存储过程更新另一个表中的所有列和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56051080/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com