2012-07-24 49 views
0

这里是新手的位。我目前正在研究一个列出不同汽车细节的MySQL表。我需要一个由另外三个领域的信息构成的新领域。所以我有'加速','速度'和'制动',它们都包含两个数字的整数,这些整数被平均到我想称为'平均'的另一个字段。通过数学操作其他字段中的值创建新字段

的逻辑是“加速” +“速度” +“”制动/ 3

我似乎无法找出正确的语法来做到这一点。我特别需要这个字段,因为我需要这些值来显示其他查询。我知道一个SELECT查询可以得到我需要的结果值,但是如何将这些值传递给该表上的永久字段?

在此先感谢您的帮助。

+0

你可以发布你的表格结构和样本数据吗? – 2012-07-24 06:46:54

+0

您需要添加Average Filed,并且该字段的值为'Acceleration'+'Speed'+'Braking'/ 3。请给出一些示例输出 – 2012-07-24 06:48:08

回答

1
  1. 首先,你需要修改表架构,以定义新的列:

    ALTER TABLE my_table ADD COLUMN Average FLOAT; 
    
  2. 接下来,更新表设定值:

    UPDATE my_table SET Average = (Acceleration + Speed + Braking)/3; 
    
  3. 考虑如何为新插入/更新的数据正确设置Average。也许使用触发器:

    CREATE TRIGGER calc_average_ins AFTER INSERT ON my_table FOR EACH ROW 
    SET NEW.Average = (NEW.Acceleration + NEW.Speed + NEW.Braking)/3; 
    
    CREATE TRIGGER calc_average_upd AFTER UPDATE ON my_table FOR EACH ROW 
    SET NEW.Average = (NEW.Acceleration + NEW.Speed + NEW.Braking)/3; 
    

你可能要考虑在view,而不是引入此列,创建所需的平均值,在即时,从而防止它从底层变得desynchronised数据值(但要注意你不再获得具有价值缓存的性能优势):

CREATE VIEW my_view AS 
SELECT *, (Acceleration + Speed + Braking)/3 AS Average FROM my_table; 

最后,请注意,平均在现实世界中没有物理意义(这将是它的单位?):一更有意义的度量可能会也可能不会更适合您的需求。

+0

精彩的回答!是的,我知道这个平均值没有实际应用。把它看作是一个“评级”值,如果你愿意的话,它会考虑汽车的这些方面给予100分。触发器将成为我将要面对的下一个问题,所以你也在我之前领先一步。再次感谢您的帮助,这会有很大的帮助。 – 2012-07-24 07:23:14

相关问题