Вычисление наибольшей стороны трехмерного объекта - функция 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
)