mysql - 如何使用其他三个表中列的平均值更新一个表中的分数列?

标签 mysql

我有 4 个表格,其中有一个分数列(分数最多 10 分)

此结构与我真实数据库中的结构类似:

 - master_entity(id, name, **score**, other-columns...)
 - scores_table1(id, score_giver1_id, master_entity_id, **score**)
 - scores_table2(id, score_giver2_id, master_entity_id, **score**)
 - scores_table3(id, score_giver3_id, master_entity_id, **score**)

我想每天使用 cron 作业执行一个简单的 SQL 脚本(针对 MySQL 数据库)。此脚本必须使用其他三个表中分数列的平均值来更新 ma​​ster_entity.score 列。

但是 scores_table1分数列的平均值仅代表分数列平均值的1/6master_entity中。

此外,scores_table2 中分数列的平均值必须仅代表平均分数列2/6> master_entity 中的值,最后 scores_table3 中 score 列 的平均值必须仅代表平均值的 3/6 master_entity中的分数列

使用其他 3 个表中分数的比例平均值来更新 ma​​ster_entity.score 列的建议 SQL 是什么?

最佳答案

我没有尝试过,但根据你的问题,你的sql查询应该如下所示:

update master_entity m
join(
select master_entity_id,avg(score) as score 
from score_table1
group by master_entity_id
) as s1 on s1.master_entity_id = m.id
join(
select master_entity_id,avg(score) as score 
from score_table2
group by master_entity_id
) as s2 on s2.master_entity_id = m.id
join(
select master_entity_id,avg(score) as score 
from score_table3
group by master_entity_id
) as s3 on s3.master_entity_id = m.id
set m.score = (1/6)*s1.score + (2/6)*s2.score + (3/6)*s3.score

其中 master_entity.score = (1/6)*avg(tbl1.score) + (2/6)*avg(tbl2.score) + (3/6)*avg(tbl3.score)

关于mysql - 如何使用其他三个表中列的平均值更新一个表中的分数列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28356019/

相关文章:

mysql - mysql中如何将两个大表合并为一个

java - 删除数据库中的条目并验证它是否已被删除 - 删除后仍然找到该条目

javascript - 在 php 中将变量增加 1 将变量值更改为 1

c# - ASP MVC 中的原始 SQL 'Insert Into'

c# - DATABASE 和 DATATABLE 之间的重复检查

php - 错误 1064 - MySQL

python - python mysql where子句中的错误

sql - 查询问题 - 结果不正确

php - 在我的网站中创建类似 Facebook 的搜索

mysql - 如果引擎是 InnoDB/MYISAM,我们可以在 mysql 表中添加多少列?