我有一个包含以下结构的表
id(int) | col1(int) | col2(int) | col3(int) ------------------------------------------ 1 | NULL | 10 | 20 2 | 5 | NULL | 30 3 | 8 | NULL | NULL
给定'id'值我需要在该记录中找到所有列的最小非空值。
例如,对于id = 1,值为10.对于id = 2,值为5,依此类推。
我如何在MySQL中执行此操作?
非常感谢任何帮助!
答案 0 :(得分:1)
试一试:
SELECT id, LEAST(
ifnull(ifnull(col1, col2), col3),
ifnull(ifnull(col2, col1), col3),
ifnull(ifnull(col3, col1), col2)) FROM table;
答案 1 :(得分:1)
LEAST()最好是NULL安全,但因为它不是,这是我能想到的最干净的解决方案:
SELECT MIN(cols)
FROM (SELECT col1
FROM table
WHERE id = 1
UNION
SELECT col2
FROM table
WHERE id = 1
UNION col3
FROM table
WHERE id = 1) AS dt
如果你需要一行,这是我能想到的最好的:
SELECT LEAST(COALESCE(col1, col2, col3)
, COALESCE(col2, col3, col1)
, COALESCE(col3, col1, col2))
FROM table
WHERE id = 1
答案 2 :(得分:1)
SELECT LEAST(
COALESCE(col1, col2, col3),
COALESCE(col2, col1, col3),
COALESCE(col3, col1, col2)
)
FROM mytable
或者,使用会话变量:
SELECT LEAST(
@r := COALESCE(col1, col2, col3),
@r := COALESCE(@r, col2),
@r := COALESCE(@r, col3)
)
FROM mytable
答案 3 :(得分:0)
自从我使用它们以来已经有一段时间了,但我认为你可以使用MySQL的MIN和LEAST功能:
SELECT MIN(LEAST(col1,col2,col3)) FROM table WHERE id=1;