2012-09-05 59 views
1

我有三個寬度,高度和深度的字段。比方說,我有這些值計算三維物體的最大邊 - MySQL函數選擇第二大值

width = 5 
height = 0.1 
depth = 3 

我想最大的兩個值從這些值過濾掉,做了兩個維度,找出最大的一邊數學。

應該a * b

a = GREATEST(width, height, depth) /* greatest value selected */ 
b = GREATEST(width, height, depth) /* <-- select the second greatest value here */ 

爲什麼我不能忽視width這裏的原因是,我不知道是哪的widthheightdepth一個有最大值和選擇價值a

編輯:沒有提到這些領域可能包含NULL

編輯:表C爲2D對象添加維度。在某些情況下,depth可能不存在。它可以是NULL

+0

如果它是一個立方體,shouldt四面八方相同長度? – mathematician1975

+0

對不起,是的,我將更改標題 –

+0

這些列在同一個表中嗎? –

回答

1

如果類型float,你可能會舍入誤差與此:

a = GREATEST(width, height, depth) /* greatest value selected */ 
c = LEAST(width, height, depth) 
b = width + height + depth - a - c /* middle value */ 

另一條路線:

b = (SELECT width AS side 
     FROM tableX 
     WHERE pk = externalTable.pk 
    UNION ALL 
     SELECT height 
     FROM tableX 
     WHERE pk = externalTable.pk 
    UNION ALL 
     SELECT depth 
     FROM tableX 
     WHERE pk = externalTable.pk 
    ORDER BY side DESC 
     LIMIT 1 OFFSET 1 
    ) 
+0

GREATEST()和LEAST()在空值時無法正常工作。 –

+0

上述公式不適用於NULL值。 「IFNULL」不是我想的解決方案。 –

+0

那麼,這取決於你想在空位時做什麼。如果有一個null呢?如果2個空值怎麼辦? –