1

幅、高さ、深さの 3 つのフィールドがあります。私がこれらの値を持っているとしましょう

width = 5
height = 0.1
depth = 3

これらの値から最大の 2 つの値を除外し、2 つの次元の計算を行って最大の側を見つけたいと思います。

そのはずa * b

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

ここで無視できないのは、 、、のどれが最大値を持ち、 の値として選択されたwidthかわからないためです。widthheightdeptha

NULL編集:これらのフィールドに値が含まれている可能性があることは言及していません

編集: テーブルには、2D オブジェクトの寸法が含まれています。場合depthによっては存在しない可能性があります。かもねNULL

4

1 に答える 1

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
    ) 
于 2012-09-05T10:41:42.337 に答える