Вычисление наибольшей стороны трехмерного объекта - функция 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 вот что я не знаю какой из width, height, depth имеет максимальное значение и выбран в качестве значения a

РЕДАКТИРОВАТЬ: не упомянул, что эти поля могут содержать NULL ценности

РЕДАКТИРОВАТЬ: Таблица содержит размеры для 2D объектов в. В некоторых случаях depth может не существовать Может быть NULL

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
    ) 
Другие вопросы по тегам