根據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函數屬於其他函數,更多其他業務情境的函數請參見其他函數。