我有几个列的结果集,可能有也可能没有空值。我想要第一个非空结果大于1,在合并我的列时添加此次要条件的最佳方法是什么?
e.g。
result:
col1 col2 col3
1 null 2
null 1 3
null null 4
返回2 3和4
答案 0 :(得分:3)
SELECT COALESCE(IF(col1>1,col1, NULL), IF(col2>1, col2, NULL), IF(col3>1, col3, NULL))
FROM tab
答案 1 :(得分:3)
lad2025的答案是正确的,你必须为每列提供一个if。但是,既然你必须拥有那些功能,那么你也可以这样做
SELECT IF(col1>1, col1, if(col2>1, col2, if (col3>1, col3, null)))
或类似地
SELECT CASE WHEN col1>1 THEN col1
WHEN col2>1 THEN col2
WHEN col3>1 THEN col3
ELSE null END
这些中的任何一个都会比使用coalesce更有效率和更少的代码,因为您仍然必须使用if来清空任何列中的任何值1
答案 2 :(得分:2)
答案 3 :(得分:2)
您可以使用单个CASE
语句执行此操作:
SELECT CASE WHEN IFNULL(col1, 0) > 1 THEN col1
WHEN IFNULL(col2, 0) > 1 THEN col2
WHEN IFNULL(col3, 0) > 1 THEN col3
END
FROM mytable
案件也可以写成:
WHEN colN IS NOT NULL AND colN > 1 THEN colN
答案 4 :(得分:0)
SELECT CASE
WHEN COL1 IS NOT NULL and COL1 > 1 THEN COL1
WHEN COL2 IS NOT NULL and COL2 > 1 THEN COL2
WHEN COL3 IS NOT NULL and COL3 > 1 THEN COL3
END