如何使用LEAST()在MySQL中获取至少3个值,其中一些值可能为null?
我在寻找比较离散值集的方法时发现了这个问题() 我希望能够获得少数选中的值的最小值,其中一些值可能为如何使用LEAST()在MySQL中获取至少3个值,其中一些值可能为null?,mysql,sql,Mysql,Sql,我在寻找比较离散值集的方法时发现了这个问题() 我希望能够获得少数选中的值的最小值,其中一些值可能为null,因为它们是可选的,但是 如果任何参数为NULL,则结果为NULL 对可空值使用COALESCE()函数: select LEAST(COALESCE(@foo, <max int>), COALESCE(@bar, <max int>)); 选择最小值(合并(@foo,),合并(@bar,); 如果您得到max int值,那么这两个值都是空的(除非有足够的机会
null
,因为它们是可选的,但是
如果任何参数为NULL,则结果为NULL
对可空值使用COALESCE()
函数:
select LEAST(COALESCE(@foo, <max int>), COALESCE(@bar, <max int>));
选择最小值(合并(@foo,),合并(@bar,);
如果您得到max int值,那么这两个值都是空的(除非有足够的机会将max int值作为实数参数,否则需要更多的逻辑)这样如何:
LEAST(COALESCE(col1, col2, col3),
COALESCE(col2, col3, col1),
COALESCE(col3, col1, col2))
显然,这不能很好地扩展到3个以上的值。有效,易于扩展,并且不依赖于数据中找不到的任何值,但可能效率极低
CREATE TABLE X
(
Id int primary key,
col1 int null,
col2 int null,
col3 int null
)
质疑
你必须硬编码一个大数字,比如99999 最小值(如果为空(COL_1999999),
如果为空(COL_299999), 如果为空(COL_399999), IFNULL(COL_1999999))
i、 e.只需添加IFNULL,然后是一个足够大的整数的值或列名。那么,为什么您的问题是如何使用
Least
来具体执行?在标题中添加Least,这样我就不会混淆任何人这是MAX/MIN问题。任何其他工作方法都是可取的。这是一种有趣的方法,尽管我不知道它有多实用。为什么要这样引用其他列?哦,我不能说它会起作用,我只是设想了一种情况,在这种情况下,对三个完全相同的数字运行LEAST(),因为只有一个值不是null。对我来说,这似乎是一种浪费,但无论如何,这可能没有什么区别。对我来说,这似乎也是一种浪费。最大值似乎更容易比较。@MarkByers-true。。。不过,我不能在字符数据上使用LEAST()。@Jeremy:按字典顺序排列单词-在lexikon中找到第一个。@ypercube这对我来说似乎是一个按顺序/限制排列的教科书案例。。。使用LEAST()
。。。嗯,我想你能做到。老实说,我从来没有使用过它,也没有感觉到它的不足。我不知道字符“max”,但我想这取决于数据。如果离散集的已知最大值远低于最大值,则此解决方案(使用最大值)的效果更好。
SELECT id,
Min(CASE c
WHEN 1 THEN col1
WHEN 2 THEN col2
WHEN 3 THEN col3
END)
FROM x,
(SELECT 1 AS c
UNION ALL
SELECT 2
UNION ALL
SELECT 3) t
GROUP BY id