1

我有宽度、高度和深度的三个字段。假设我有这些价值观

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,是因为不知道 , , 中的哪一个widthheight最大值depth,选为a

编辑:没有提到这些字段可能包含NULL

编辑:该表包含二维对象的尺寸。在某些情况下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 回答