全部產品
Search
文件中心

MaxCompute:CASE WHEN

更新時間:Feb 28, 2024

根據value_condition的計算結果,靈活地返回不同的result值。

命令格式

MaxCompute提供以下兩種case when格式:

  • case <value>
    when <value1> then <result1>
    [
      when <value2> then <result2>
      when <valuen> then <resultn>
    ]
    [
    	else <resultm>
    ]
    end
  • case
    	when (<_condition1>) then <result1>
    [
      when (<_condition1>) then <result2>
      when (<_condition1>) then <resultn>
    ]
    [
    	else <resultm>
    ]
    end

參數說明

執行判斷順序從上到下,判斷值滿足會直接退出。

  • value:必填。比較的值。

  • _condition:必填。指定判斷條件。

  • result:必填。傳回值。

傳回值說明

  • 如果result類型只有BIGINT、DOUBLE,統一轉為DOUBLE後,再返回結果。

  • 如果result類型中有STRING類型,則統一轉為STRING後,再返回結果。如果無法進行類型轉換,例如BOOLEAN類型無法轉換為STRING類型,則會返回報錯。

  • 不允許其他類型之間的轉換。

使用樣本

  • 例如表sale_detail的欄位為shop_name string, customer_id string, total_price double,,包含資料如下。

    +------------+-------------+-------------+------------+------------+
    | shop_name  | customer_id | total_price | sale_date  | region     |
    +------------+-------------+-------------+------------+------------+
    | s1         | c1          | 100.1       | 2013       | china      |
    | s2         | c2          | 100.2       | 2013       | china      |
    | s3         | c3          | 100.3       | 2013       | china      |
    | null       | c5          | NULL        | 2014       | shanghai   |
    | s6         | c6          | 100.4       | 2014       | shanghai   |
    | s7         | c7          | 100.5       | 2014       | shanghai   |
    +------------+-------------+-------------+------------+------------+

    命令樣本如下。

    select 
    case  
    when region='china' then 'default_region'
    when region like 'shang%' then 'sh_region'
    end as region 
    from sale_detail;

    返回結果如下。

    +------------+
    | region     |
    +------------+
    | default_region |
    | default_region |
    | default_region |
    | sh_region  |
    | sh_region  |
    | sh_region  |
    +------------+
  • 建立表並插入資料:

    --建立表
    create table mf_casewhen (id bigint,name string);
    --插入資料
    insert into table mf_casewhen 
         values(1,"a1"),
               (2,"a2"),
                     (3,"a3"),
                     (4,"a4"),
                     (5,"a5"),
                     (6,"a6"),
                     (7,"a7"),
                     (8,"a8"),
                     (9,"a9");
    • 格式一:

      select
      case
      when id<2 then 't1'
      when id<4 then 't2'
      else 't3'
      end as id_t
      from mf_casewhen;

      返回結果如下:

      +------+
      | id_t |
      +------+
      | t1   |
      | t2   |
      | t2   |
      | t3   |
      | t3   |
      | t3   |
      | t3   |
      | t3   |
      | t3   |
      +------+
    • 格式二:

      select
      case id
      when 1 then 't1'
      when 2 then 't2'
      else 't3'
      end as id_t
      from mf_casewhen;

      返回結果如下:

      +------+
      | id_t |
      +------+
      | t1   |
      | t2   |
      | t3   |
      | t3   |
      | t3   |
      | t3   |
      | t3   |
      | t3   |
      | t3   |
      +------+

相關函數

CASE WHEN函數屬於其他函數,更多其他業務情境的函數請參見其他函數