2010-12-14 80 views
0

百分比計算研究我有一個這樣的表:更新與同桌

ItemID  PersonID Score  Percentage 
========================================== 
1    1  10   [ = 10/10+30 = 25%] 
1    2  30   [ = 30/10+30 = 75%] 
2    1  20   [ = 20/20+40 = 33%] 
2    2  40   [ = 40/20+40 = 67%] 

的「百分比」中的數據沒有進入,但是自動計算的,在一定的時間間隔。 計算是百分比=分數/總項目ID分數

而不是使用「選擇做數學更新」方法,我試圖編寫單個SQL來更新「百分比」。

我想什麼是這樣的:

UPDATE tb_temp AS t1 
    SET t1.Percentage = 
     CEIL(t1.Score/
      (SELECT SUM(t2.Score) FROM tb_temp AS t2 WHERE t2.ItemID = t1.ItemID) 
     ); 

但它不工作(錯誤代碼:1093你不能指定FROM子句中更新目標表「T1」)。

有什麼想法?

+0

隨着'CEIL()',你會得到'34%'和'67%''爲條目ID = 2'。 – Danosaure 2010-12-14 11:14:56

+0

thx提醒....我會使用ROUND()來代替。 – LazNiko 2010-12-14 11:26:27

回答

-1

嘗試:

UPDATE tb_temp t1 
    JOIN (SELECT ItemId, SUM(t2.Score) TotalScore 
      FROM tb_temp 
      group by ItemId) t2 ON t2.ItemID = t1.ItemID 
    SET t1.Percentage = CEIL(t1.Score/t2.TotalScore) 
+0

錯誤1054(42S22):'字段列表'中的未知列't2.Score' – Danosaure 2010-12-14 11:03:57

+0

假設@Michael Pakhantsov想要寫:'更新tb_temp t1內部連接(從tb_temp中選擇tt.ItemID,sum(tt.Score)TotalScore tt (tT.ItemId)t2使用(ItemID)設置t1.Percentage = CEIL(t1.Score/t2.TotalScore * 100)'(假設'Percentage int')。 – Danosaure 2010-12-14 11:08:44

+0

@Danosaure:您的修改版本按預期工作〜thx! – LazNiko 2010-12-14 11:25:44

0
UPDATE tb_temp AS t1 
    SET t1.Percentage = 
     CEIL(t1.Score/
      (SELECT SUM(t2.Score) FROM tb_temp AS t2 left join tb_temp AS t3 on t2.ItemID = t3.ItemID) 
     ); 
+0

你甚至試過你的陳述嗎? – Danosaure 2010-12-14 11:01:56

+0

@Danosaure糾正 – 2010-12-14 11:04:20

+0

我再說一遍......你有沒有嘗試過你的「糾正」陳述? – Danosaure 2010-12-14 11:10:45