如何制作一个基于MySQL其他列总和的表?

时间:2019-02-14 04:01:46

标签: mysql sql

我需要帮助解决这个问题。我是MySQL的新手。我敢问这个问题是被问到的,但我不知道问正确问题的术语。

假设我在MySQL中有两个表。表1是插入新数据的位置。表2应该自动更新。表2中的数据是表1每行中指定列的总和。

例如,

TABLE 1
| ID |  A |  B |  C |  D |
|----+----+----+----+----|
| 0  | 11 | 10 | 39 | 11 |
| 1  | 32 | 21 | 21 | 12 |
| 2  | 12 | 23 | 24 | 13 |
| 3  | 45 | 35 | 31 | 14 |

TABLE 2
| ID | ABCD | AB | CD | 
|----+------+----+----|
| 0  |  71  | 21 | 50 |
| 1  |  86  | 53 | 33 |
| 2  |  72  | 35 | 37 |
| 3  |  125 | 80 | 45 |

2 个答案:

答案 0 :(得分:2)

我建议在此处创建视图:

CREATE VIEW yourView AS (
    SELECT
        ID,
        A + B + C + D AS ABCD,
        A + B AS AB,
        C + D AS CD
    FROM TABLE_1
)

尝试将这些数据实际维护在实际的物化表中可能不是一个有效的解决方案,因为数据是派生的。

答案 1 :(得分:1)

VIEW的替代方法是向VIRTUAL添加Table1 generated columns。您可以使用ALTER TABLE命令添加它们:

ALTER TABLE Table1
ADD COLUMN ABCD INT GENERATED ALWAYS AS (A+B+C+D) VIRTUAL,
ADD COLUMN AB INT GENERATED ALWAYS AS (A+B) VIRTUAL,
ADD COLUMN CD INT GENERATED ALWAYS AS (C+D) VIRTUAL;

使用VIRTUAL关键字意味着这些值是在读取行时计算的,而不是存储在表中的。完成此操作后,您现在可以

SELECT * FROM Table1

输出

ID  A   B   C   D   ABCD    AB  CD
0   11  10  39  11  71      21  50
1   32  21  21  12  86      53  33
2   12  23  24  13  72      35  37
3   45  35  31  14  125     80  45

Demo on dbfiddle