我需要在 mySQL 中编写一个简单的查询,在MIN()
子句中使用WHERE
,计算两个数字的最小值,其中一个是列值(可能为NULL值),另一个是固定数字,类似于>
SELECT ... WHERE ... (len <= MIN(maxStay, 365))
我知道我可以写一些类似&gt;
的内容 SELECT ... WHERE ... ((len <= maxStay) OR (maxStay IS NULL)) AND (len <= 365)
但我更喜欢简单的事情,例如在MIN()
子句中使用WHERE
。是可能?如果是这样,哪个性能更好?
答案 0 :(得分:5)
答案 1 :(得分:2)
min
和max
是聚合函数,不能在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)))