在 Apache Doris 中,CASE WHEN
表达式是一种常用的条件判断结构,用于根据不同的条件返回不同的结果。它可以用于 SELECT 语句中,也可以在计算列、聚合函数内部以及其他需要条件判断的地方使用。
下面是一些具体的使用 CASE WHEN
的示例,帮助你更好地理解其用法。
示例 1:基本用法
假设你有一个名为 orders
的表,其中包含 amount
和 status
列。你想根据 status
列的值来给 order_type
分类:
SELECT
id,
amount,
status,
CASE
WHEN status = 'PAID' THEN 'Paid'
WHEN status = 'CANCELLED' THEN 'Cancelled'
ELSE 'Other'
END AS order_type
FROM
orders;
在这个查询中,order_type
列将根据 status
列的值被赋值为 ‘Paid’、‘Cancelled’ 或 ‘Other’。
示例 2:计算新的列值
你可以使用 CASE WHEN
来根据条件计算新的列值:
SELECT
id,
amount,
CASE
WHEN amount > 1000 THEN 'High'
WHEN amount BETWEEN 500 AND 1000 THEN 'Medium'
ELSE 'Low'
END AS price_category
FROM
orders;
在这个例子中,根据 amount
列的值,将每一笔订单分类为 ‘High’、‘Medium’ 或 ‘Low’。
示例 3:与聚合函数结合使用
CASE WHEN
也可以与聚合函数一起使用,例如计算不同状态下的订单数量:
SELECT
CASE
WHEN status = 'PAID' THEN 'Paid'
WHEN status = 'CANCELLED' THEN 'Cancelled'
ELSE 'Other'
END AS order_type,
COUNT(*) AS count
FROM
orders
GROUP BY
CASE
WHEN status = 'PAID' THEN 'Paid'
WHEN status = 'CANCELLED' THEN 'Cancelled'
ELSE 'Other'
END;
在这个查询中,我们根据 status
计算不同类型的订单数量。
示例 4:嵌套使用
CASE WHEN
表达式可以嵌套使用,以处理更复杂的逻辑:
SELECT
id,
amount,
CASE
WHEN amount > 1000 THEN 'High'
ELSE
CASE
WHEN amount BETWEEN 500 AND 1000 THEN 'Medium'
ELSE 'Low'
END
END AS price_category
FROM
orders;
在这个例子中,如果 amount
大于 1000,则 price_category
为 ‘High’;否则,进一步检查 amount
是否在 500 到 1000 之间,并据此分类为 ‘Medium’ 或 ‘Low’。
示例 5:使用 ELSE
和 END
每个 CASE WHEN
表达式必须以 END
结束,并且可以包含一个 ELSE
子句来处理未匹配的情况:
SELECT
id,
amount,
CASE
WHEN amount > 1000 THEN 'High'
WHEN amount BETWEEN 500 AND 1000 THEN 'Medium'
ELSE 'Low'
END AS price_category
FROM
orders;
在这个例子中,如果没有其他条件匹配,price_category
将默认为 ‘Low’。
示例 6:使用 COALESCE
与 CASE WHEN
有时,你可能需要处理空值(NULL
),可以结合使用 COALESCE
和 CASE WHEN
:
SELECT
id,
COALESCE(amount, 0),
CASE
WHEN COALESCE(amount, 0) > 1000 THEN 'High'
WHEN COALESCE(amount, 0) BETWEEN 500 AND 1000 THEN 'Medium'
ELSE 'Low'
END AS price_category
FROM
orders;
在这个查询中,如果 amount
是 NULL
,则将其视为 0
并根据条件进行分类。