mysql - 数据库 MYSQL Sum 和 Avg 自动化

标签 mysql sql

我有一个名为 Student 的表,如图所示

please click here to view image as i do not have permission to post image directly till now.

当我输入科目的分数值时,我想找到总计和平均值自动显示在各自的列中,如果我想通过使用查询手动在总计和平均值列中插入值,它应该显示错误。

最佳答案

如果您的 mysql 版本支持生成列,那么您可以使用此功能。如果您尝试插入到生成的列,Mysql 将抛出错误。例如。

drop table if exists t;
create table t(id int, s1 int,s2 int, total int as (ifnull(s1,0)+ifnull(s2,0)));

insert into t(id,s1,s2) values (1,10,20);
Query OK, 1 row affected (0.03 sec)
insert into t(id,s1,s2,total) values (2,20,null,5);
ERROR 1906 (HY000): The value specified for computed column 'total' in table 't' ignored

select * from t;
+------+------+------+-------+
| id   | s1   | s2   | total |
+------+------+------+-------+
|    1 |   10 |   20 |    30 |
+------+------+------+-------+
1 row in set (0.00 sec)

一般来说,您不应该存储可以计算的项目。另请注意 ifnull 测试。您的问题并不涉及所有科目是否都有值,因此您应该对总计和平均的可能性进行编码。

关于mysql - 数据库 MYSQL Sum 和 Avg 自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52577294/

相关文章:

MySQL。包含 utf-8 字符串的 json 字段顺序错误

php - 我的代码插入数据出现问题

sql - 获取按 ID 分组的最新条目

SQL 'ab,cd' 与 'cd,ab' 相比为真

sql - 是否可以在 Oracle 中将表名作为参数传递?

python - 在 SQLAlchemy 中按关系计数过滤

mysql - 如何获取字段中所有元素的计数?

mysql - SELECT 行中的子查询

php - 如何在 Laravel 中制作带有产品属性的智能过滤器

sql - 如何将两个记录合并为一行?