2011-06-18 80 views
2

我一直在努力解決這個特定的問題,雖然我可以很容易地想到一種蠻力PHP + MySQL解決方案,我想要一些指導解決這個特定的問題,而無需使用PHP迭代字段。MySQL的幫助,基於計算更新字段

所以..那麼,這是問題所在。 我想通過單個查詢(或3)來預先計算每個房間相對於所有其他房間的大小,使得大於所有其他房間的66%的房間可以有一個填充爲大的類別,而在33% -66%的範圍給出中等,其餘的被認爲是小。

我對如何完成這個有一個總體的想法,但我希望有人更熟練的SQL查詢可以至少指出我在正確的方向。

對我來說,最困難的部分配備了能夠同時更新每個適合下降在一定範圍:(內的標準領域。

這裏的表

Rooms 
    ID | Length | Width | Relative Size [Expected Values] 
    ------------------------------------ 
    1 | 15  | 12 | Large 
    2 | 15  | 12 | Large 
    3 | 10  | 10 | Medium 
    4 | 10  | 10 | Medium 
    5 | 8  | 9  | Small 
    6 | 8  | 8  | Small 
    7 | 8  | 7  | Small 
    8 | 10  | 9  | Medium 

我的例子d完全滿意的資源或線索可以幫助我,但我一直在圈子裏。

感謝您的任何幫助我的嘗試

編輯:我最終採用了標準偏差方法,因爲在這種情況下它更有意義,我會將其作爲答案發布。

+1

我不會歸類房前是空比給定的更大或更小,而是基於它們的尺寸相對於所發現的最大和最小尺寸。如果有2個房間15×10,12個房間10×9和3個房間8×8,如果我使用你的方法分配它們,我最終會分配錯誤的類別。 –

+0

真的,這個方法是我老闆給我提出的,我絕對更關心讓他的方法工作,而不是去思考實際的錯誤含義...... – Anther

回答

1

我不能想辦法做到這一點在1個查詢,但這裏是我試圖做到這一點在3,假設大小基於有多少間填充

Update table set size = 'Large' where ID in (select TOP 33 PERCENT ID from table order by length*width Desc) 

Update table set size = 'Small' where ID in (select TOP 33 PERCENT ID from table order by length*width Asc) 

Update table set size = 'Medium' where size = null 
+0

我很喜歡這個答案,我要去實際上將其轉換爲MySQL符號......這可能會花費我一點時間,因爲我對子查詢真的很陌生,但如果沒有其他人打我,我會嘗試用MySQL解決方案更新您的答案(你只能使用常規的SQL)。 – Anther