基于优先级筛选的ClickHouse SQL查询实现
解决方案
可以使用ClickHouse内置的multiIf函数实现这种按优先级的条件判断,它能高效处理多分支逻辑,代码简洁易懂。
示例SQL
假设你的表名为your_table,三个目标列分别是col1、col2、col3,新增的结果列名为result_col:
SELECT col1, col2, col3, multiIf( col1 IN (0, 1), col1, col2 IN (0, 1), col2, col3 IN (0, 1), col3, -1 ) AS result_col FROM your_table;
逻辑说明
- 优先检查
col1:如果值为0或1,直接将其填入结果列; - 若
col1为-1,检查col2:如果值为0或1,取该值填入结果列; - 若
col2也为-1,检查col3:如果值为0或1,取该值填入结果列; - 所有列均为-1时,结果列填入-1。
替代方案:标准SQL CASE WHEN语句
如果你更习惯标准SQL语法,也可以用嵌套CASE表达式实现相同逻辑:
SELECT col1, col2, col3, CASE WHEN col1 IN (0, 1) THEN col1 WHEN col2 IN (0, 1) THEN col2 WHEN col3 IN (0, 1) THEN col3 ELSE -1 END AS result_col FROM your_table;
内容的提问来源于stack exchange,提问作者Marharyta Kalynchuk
相关产品推荐
相关产品推荐

