WHERE子句中的MIN()

时间:2012-02-27 17:37:33

标签: mysql

我需要在 mySQL 中编写一个简单的查询,在MIN()子句中使用WHERE,计算两个数字的最小值,其中一个是列值(可能为NULL值),另一个是固定数字,类似于>

SELECT ... WHERE ... (len <= MIN(maxStay, 365))

我知道我可以写一些类似&gt;

的内容

SELECT ... WHERE ... ((len <= maxStay) OR (maxStay IS NULL)) AND (len <= 365)

但我更喜欢简单的事情,例如在MIN()子句中使用WHERE。是可能?如果是这样,哪个性能更好

4 个答案:

答案 0 :(得分:5)

要返回两个值中的较小者,请使用MySql中的LEAST函数。要处理空值,请使用IFNULL()

WHERE len <= LEAST(IFNULL(maxStay, 365), 365)

答案 1 :(得分:2)

minmax是聚合函数,不能在where子句中使用,尽管它们可以在having子句中使用。

但我认为您正在寻找LEAST,尽管它不适用于NULL值。如果您编写LEAST(1, NULL),它将始终返回NULL,无论您放置哪个值而不是1

您可以使用IFNULL解决这个问题:

SELECT 
  ...
WHERE
  len <= LEAST(IFNULL(maxStay, 365), 365)

答案 2 :(得分:0)

你想要LEAST功能; MIN是列值的聚合函数

答案 3 :(得分:-1)

您正在寻找的功能是LEAST()

mysql> select least(1,2);
+------------+
| least(1,2) |
+------------+
|          1 |
+------------+

所以你的查询将是这样的(更新为根据需要处理NULL):

SELECT ... 
WHERE ... ((maxStay IS NULL) OR (maxStay IS NOT NULL AND len <= LEAST(maxStay, 365)))