Mysql - 如何创建自动汇总行的列?

时间:2011-05-15 05:18:28

标签: mysql sql aggregate-functions

我有一个名为“character”的mysql数据库表,其中包含名称,力量,智力,技能等列。我想创建一个自动总结力量,智力和技能的专栏。这可能吗?

我看到很多页面显示了如何进行查询。我做了一个查询就好了,比如 选择(str + intel + skl)作为字符的总和; 它返回一个总和就好了。

但我缺少的(不明白)是如何:

  1. AUTOMATE查询到我的mysql数据库(例如,当我做“select * from character”时,它会显示“力量,智力,技能,总和”),
  2. 或者在哪里/如何将mysql查询合并到我的rails应用程序中,以便SUM实时显示,以及何时编辑,例如强度发生时,SUM会相应更新。
  3. 一个关键点,我在一行(力量,智力,技能)上总结列,而不是对一列(几个字符的强度)求和。

4 个答案:

答案 0 :(得分:3)

您最好的选择是使用触发器(或应用级别的类似代码)。

使用视图也有效,但如果您经常需要它,则会出于性能原因而预先计算它。

有关触发器的介绍,请参阅:

http://dev.mysql.com/doc/refman/5.6/en/triggers.html

你可能想要这样的东西:

CREATE TRIGGER character_sum_ins BEFORE INSERT ON character
FOR EACH ROW SET NEW.sum = NEW.strength + NEW.intelligence + NEW.skill;

CREATE TRIGGER character_sum_upd BEFORE UPDATE ON character
FOR EACH ROW SET NEW.sum = NEW.strength + NEW.intelligence + NEW.skill;

或者,预先计算应用中的总和并相应地存储它。

旁注:问问自己是否真的需要这个存储。正如另一位评论者指出的那样,可能根本不需要自动计算数据。

答案 1 :(得分:1)

这应该有效,如果我正确理解你的问题,力量,智力,技能列是数字数据类型。

select strength, intelligence, skill, strength+intelligence+skill as sum
from character

根据建议,可以使用以下方法轻松创建视图:

create view totals as
select strength, intelligence, skill, strength+intelligence+skill as sum
from character

答案 2 :(得分:0)

您可能希望将其转换为存储过程。该过程可以进行计算,您可以将结果看作是列。

您也可以使用这个用例的简单视图。

答案 3 :(得分:0)

不要在mysql中执行此操作,只需在显示时添加值,严重。

或者如果你真的想要,在返回它们时在SELECT语句中将它们加到mysql中。

不要只使用触发器来维持一些数字 - 这是一种让所有未来开发者混淆在项目上的严重方法。