2012-07-24 82 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

相關問題