是否可以在mysql的单元格中添加现有值?

时间:2019-06-17 08:21:33

标签: mysql

我有一个表,该表可以保存每月值,也可以保存整个年份的值。每当我插入一个月的值时,是否可以将其添加到年度值中?

我想避免先加载该值,然后将其添加到服务器代码中,然后再次写入。

3 个答案:

答案 0 :(得分:1)

您的最佳方法是避免表中的冗余数据。当您需要年份总计时,请选择它们。

您没有告诉我们您的表定义,所以我会猜测。表months包含

 year   int (for example, 2019)
 month  int (1-12)
 value  number

您可以通过以下明显的方式来获取详细信息:`

  SELECT year, month, value FROM months;

您可以通过这种方式获取详细信息和年度总计

  SELECT year, month, SUM(value) value
    FROM months
   GROUP BY year, month WITH ROLLUP;

此查询的结果集看起来与其他结果集相似,但也包含总和。看起来像这样:

| year | month | value |
| ---- | ----- | ----- |
| 2018 | 1     | 100   |   detail month values...
| 2018 | 2     | 140   |
| 2018 | 3     | 130   |
| 2018 | 4     | 190   |
| 2018 | 5     | 120   |
| 2018 | 6     | 180   |
| 2018 | 7     | 130   |
| 2018 | 8     | 140   |
| 2018 | 9     | 150   |
| 2018 | 10    | 200   |
| 2018 | 11    | 230   |
| 2018 | 12    | 300   |
| 2018 |       | 2010  | yearly sum for 2018 (month is NULL)
| 2019 | 1     | 100   |
| 2019 | 2     | 130   |
| 2019 | 3     | 160   |
| 2019 | 4     | 140   |
| 2019 | 5     | 190   |
| 2019 | 6     | 240   |
| 2019 |       | 960   | yearly sum for 2019 (month is NULL)
|      |       | 2970  | total sum  (both month and year are NULL)

View on DB Fiddle

为什么这是个好过程?

  1. 您不需要存储任何额外的数据。
  2. 即使您更新或删除表中的行,它也可以正常工作。
  3. 速度很快:SQL是做这种事情的。

答案 1 :(得分:0)

当在Month表中插入任何值时,您可以编写触发器并在Years表中插入值

CREATE TRIGGER tr_month ON monthly_table
    AFTER INSERT
    AS
    BEGIN
      UPDATE year_table
      SET // insert your values here
      FROM inserted
      WHERE monthly.id = inserted.id;  // something like that, I am not sure about your structure thats why cannot add exact syntax
    END
   GO

答案 2 :(得分:0)

只需添加客户端值即可解决此问题,这也节省了服务器上的计算时间。