MySQL 多列总和脚本
Posted
技术标签:
【中文标题】MySQL 多列总和脚本【英文标题】:MySQL Sum of multiple columns script 【发布时间】:2020-11-23 07:07:18 【问题描述】:抱歉,我是 mysql 的初学者,我需要尽快获得帮助。 所以,我有 2 张桌子
程序目录:
idProcedure INT(PRIMARY KEY)
ProcedureName VARCHAR(45)
ProcedureCost DOUBLE
ProcedureTax DOUBLE
TotalCost DOUBLE AS ProcedureTax+ProcedureCost
病人预约:
idAppointment INT(PRIMARY KEY)
idProcedure1 INT
idProcedure2 INT
idProcedure3 INT
idProcedure4 INT
idProcedure5 INT
TotalCost DOUBLE
所以,问题如下: 每个患者预约最多可以有 5 个医疗程序(例如,如果只有 3 个,则前 3 个 idProcedure 将具有程序的 id,其余的将为 NULL )。我尝试将 PatientAppointment 中的 5 个 id 作为 ProcedureCatalogue 中 idProcedure 的外键,但它似乎不起作用(我使用的是最新版本的 MySQL Workbench,当我尝试为 idProcedure 选择列时,没有ProcedureCatalogue 中的列),但这不是真正的问题,因为它可以在插入数据时使用正确的信息完成。
我需要做的但我真的不知道如何制作一个脚本,将 PatientAppointment 的 TotalCost 作为每个程序的 TotalCost 的总和。
例如,如果您有 2 个程序(最多可有 5 个(来自 PatientAppointment 的 idProcedure 与来自 ProcedureCatalog 的 idProcedure 对应))
你会得到类似的东西: 程序目录:
id ProcedureName ProcedureCost ProcedureTax TotalCost
1 procedure1 20 30 50
2 procedure2 40 60 100
3 procedure3 1 1 2
4 procedure4 5 5 10
5 procedure5 25 30 55
对于 PatientAppointment:
idAppointment id1 id2 id3 id4 id5 TotalCost
1 1 3 NULL NULL NULL 52
2 2 4 5 NULL NULL 165
3 4 NULL NULL NULL NULL 10
4 1 2 3 4 5 217
所以,请帮助我填写 PatientAppointment 中的 TotalCost 的脚本,我试图在过去 6 个小时内完成它,但我没有运气:(。
【问题讨论】:
如果我想要第六次手术怎么办,而且钱很少双倍;这就是发明 DECIMAL 的原因。 @Strawberry 这是更大的大学作业的一部分,我正在使用提供给我的数据类型。 好吧,我只能说,如果是我,我会先修复架构,使用适当的数据类型和规范化设计。 @Strawberry 你能给我一些建议吗(我说过我是 MySql 的初学者) 任何时候你发现自己有枚举的列名(例如,2),你可以确定你的设计是次优的。约会以及在该约会时应进行的程序的详细信息是两件不同的事情,属于两个单独的表格。 【参考方案1】:UPDATE PatientAppointment pa
LEFT JOIN ProcedureCatalogue pc1 ON pa.idProcedure1 = pc1.idProcedure
LEFT JOIN ProcedureCatalogue pc2 ON pa.idProcedure2 = pc2.idProcedure
LEFT JOIN ProcedureCatalogue pc3 ON pa.idProcedure3 = pc3.idProcedure
LEFT JOIN ProcedureCatalogue pc4 ON pa.idProcedure4 = pc4.idProcedure
LEFT JOIN ProcedureCatalogue pc5 ON pa.idProcedure5 = pc5.idProcedure
SET pa.TotalCost = COALESCE(pc1.TotalCost, 0)
+ COALESCE(pc2.TotalCost, 0)
+ COALESCE(pc3.TotalCost, 0)
+ COALESCE(pc4.TotalCost, 0)
+ COALESCE(pc5.TotalCost, 0);
fiddle
【讨论】:
以上是关于MySQL 多列总和脚本的主要内容,如果未能解决你的问题,请参考以下文章