doris case when使用示例_聚合函数


在 Apache Doris 中,CASE WHEN 表达式是一种常用的条件判断结构,用于根据不同的条件返回不同的结果。它可以用于 SELECT 语句中,也可以在计算列、聚合函数内部以及其他需要条件判断的地方使用。

下面是一些具体的使用 CASE WHEN 的示例,帮助你更好地理解其用法。

示例 1:基本用法

假设你有一个名为 orders 的表,其中包含 amountstatus 列。你想根据 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:使用 ELSEEND

每个 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:使用 COALESCECASE WHEN

有时,你可能需要处理空值(NULL),可以结合使用 COALESCECASE 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;

在这个查询中,如果 amountNULL,则将其视为 0 并根据条件进行分类。