SQL中的Case When Else End的用法

时间:2023-01-31 00:00:04

最近在对hive做优化时遇到了Case When Else End语法,所以就总结一下相关的知识给大家分享一下,

具体的格式如下:

条件判断语句

update:

update table  
set 字段1=case     
    when 条件1 then 值1       
    when 条件2 then 值2      
    else 值3      
    end     
where    ……  

select:

select 字段1, 字段2,       
    case 字段3     
    when 值1 then 新值       
    when 值2 then 新值      
    end as 重新命名字段3的名字       
from table      
where ……      
order by ……   

CASE 可能是 SQL 中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你可以在 WHERE 子句中使用CASE。 
SQL中的Case When Else End的用法 
SQL中的Case When Else End的用法首先让我们看一下 
CASE 的语法。在一般的 SELECT 中,其语法如下: 
SQL中的Case When Else End的用法 
SQL中的Case When Else End的用法
SELECT <myColumnSpec> = 
SQL中的Case When Else End的用法
CASE 
SQL中的Case When Else End的用法
WHEN <A> THEN <somethingA> 
SQL中的Case When Else End的用法
WHEN <B> THEN <somethingB> 
SQL中的Case When Else End的用法
ELSE <somethingE> 
SQL中的Case When Else End的用法
END 
SQL中的Case When Else End的用法 
SQL中的Case When Else End的用法在上面的代码中需要用具体的参数代替尖括号中的内容。


具体的用例

用例一:


假设有如下表格,包括Id, Category, Name, Property四个字段。其中,Property1_Value代表相应记录的属性,该字段的初衷是用来动态存储相应的属性值。如果Category是Book, 则存入的是相应Book的Price,如果是Animal,则存入相应动物的年龄。

表:CateogoryDetail

Id          Category           Name                                                     Property1_Value
1           Book                  Journey to the West                                17.8
2            Animal               Dog                                                          4
3           Book                 The Romance of the Three Kingdoms         23.5
4           Animal               Cat                                                            3

现在要解决这样一个问题,创建一个视图,需要有以下5个字段,Id, Category, Name, Age, Price。 (如果是Animal,则相应的Price为NULL,如果是Book,相应的Age为NULL。)

View的SQL语句可以这样写:

SELECT Id, Category, Name, CASE When(Category = 'Animal') Then Property1_Value ELSE NULL END AS Age, CASE When(Category = 'Book') Then Property1_Value ELSE NULL END AS Price

From CateogoryDetail

大功告成。


用例二:

USE pubs 
SQL中的Case When Else End的用法
GO 
SQL中的Case When Else End的用法
SELECT 
SQL中的Case When Else End的用法     Title, 
SQL中的Case When Else End的用法    
'Price Range' = 
SQL中的Case When Else End的用法    
CASE 
SQL中的Case When Else End的用法        
WHEN price IS NULL THEN 'Unpriced' 
SQL中的Case When Else End的用法        
WHEN price < 10 THEN 'Bargain' 
SQL中的Case When Else End的用法        
WHEN price BETWEEN 10 and 20 THEN 'Average' 
SQL中的Case When Else End的用法        
ELSE 'Gift to impress relatives' 
SQL中的Case When Else End的用法    
END 
SQL中的Case When Else End的用法
FROM titles 
SQL中的Case When Else End的用法
ORDER BY price 
SQL中的Case When Else End的用法
GO 
SQL中的Case When Else End的用法 
SQL中的Case When Else End的用法这是 
CASE 的典型用法,但是使用 CASE 其实可以做更多的事情。比方说下面的 GROUP BY 子句中的 CASE

 
用例三:


SQL中的Case When Else End的用法
SELECT 'Number of Titles'Count(*
SQL中的Case When Else End的用法
FROM titles 
SQL中的Case When Else End的用法
GROUP BY 
SQL中的Case When Else End的用法    
CASE 
SQL中的Case When Else End的用法        
WHEN price IS NULL THEN 'Unpriced' 
SQL中的Case When Else End的用法        
WHEN price < 10 THEN 'Bargain' 
SQL中的Case When Else End的用法        
WHEN price BETWEEN 10 and 20 THEN 'Average' 
SQL中的Case When Else End的用法        
ELSE 'Gift to impress relatives' 
SQL中的Case When Else End的用法    
END 
SQL中的Case When Else End的用法
GO 
SQL中的Case When Else End的用法 

用例四:


SQL中的Case When Else End的用法你甚至还可以组合这些选项,添加一个 ORDER BY 子句,如下所示: 
SQL中的Case When Else End的用法 
SQL中的Case When Else End的用法
USE pubs 
SQL中的Case When Else End的用法
GO 
SQL中的Case When Else End的用法
SELECT 
SQL中的Case When Else End的用法    
CASE 
SQL中的Case When Else End的用法        
WHEN price IS NULL THEN 'Unpriced' 
SQL中的Case When Else End的用法        
WHEN price < 10 THEN 'Bargain' 
SQL中的Case When Else End的用法        
WHEN price BETWEEN 10 and 20 THEN 'Average' 
SQL中的Case When Else End的用法        
ELSE 'Gift to impress relatives' 
SQL中的Case When Else End的用法    
END AS Range, 
SQL中的Case When Else End的用法     Title 
SQL中的Case When Else End的用法
FROM titles 
SQL中的Case When Else End的用法
GROUP BY 
SQL中的Case When Else End的用法    
CASE 
SQL中的Case When Else End的用法        
WHEN price IS NULL THEN 'Unpriced' 
SQL中的Case When Else End的用法        
WHEN price < 10 THEN 'Bargain' 
SQL中的Case When Else End的用法        
WHEN price BETWEEN 10 and 20 THEN 'Average' 
SQL中的Case When Else End的用法        
ELSE 'Gift to impress relatives' 
SQL中的Case When Else End的用法    
END
SQL中的Case When Else End的用法     Title 
SQL中的Case When Else End的用法
ORDER BY 
SQL中的Case When Else End的用法    
CASE 
SQL中的Case When Else End的用法        
WHEN price IS NULL THEN 'Unpriced' 
SQL中的Case When Else End的用法        
WHEN price < 10 THEN 'Bargain' 
SQL中的Case When Else End的用法        
WHEN price BETWEEN 10 and 20 THEN 'Average' 
SQL中的Case When Else End的用法        
ELSE 'Gift to impress relatives' 
SQL中的Case When Else End的用法    
END
SQL中的Case When Else End的用法     Title 
SQL中的Case When Else End的用法
GO 
SQL中的Case When Else End的用法 
SQL中的Case When Else End的用法注意,为了在 
GROUP BY 块中使用 CASE,查询语句需要在 GROUP BY 块中重复 SELECT 块中的 CASE 块。 
SQL中的Case When Else End的用法 
SQL中的Case When Else End的用法除了选择自定义字段之外,在很多情况下 
CASE 都非常有用。再深入一步,你还可以得到你以前认为不可能得到的分组排序结果集。