SQLのcase when then用法

3107 ワード

原文のリンク:https://www.cnblogs.com/Richardzhu/p/3571670.html
caseは二種類のフォーマットを持っています。簡単なcase関数とcase検索関数
--  case  
case sex
  when '1' then ' '
  when '2' then ' ’
  else '  ' end
--case    
case when sex = '1' then ' '
     when sex = '2' then ' '
     else '  ' end 
この2つの方法は、同じ機能を実現することができます。簡単なcase関数の書き方は比較的簡潔ですが、case検索関数と比べると、機能的には判定式を書くなど制限があります。
もう一つ重要な問題があります。case関数は最初の該当条件の値だけ返します。残りのcase部分は自動的に無視されます。
--   ,    sql,       “   ”    
case when col_1 in ('a','b') then '   '
     when col_1 in ('a') then '   '
     else '  ' end  
実例のプレゼンテーション:
select u.id,u.name,u.sex,
  (case u.sex
      when 1 then ' '
      when 2 then ' '
      else '  '
      end
  )  
from users u;
 
                                     ID NAME                        SEX   
--------------------------------------- -------------------- ---------- ------
                                      1                                 
                                      2                             1  
                                      3                                 
                                      4                                 
                                      5                             2  
                                      6                             1  
                                      7                             2  
                                      8                             1  
リストに「sex」の列が表示されたくない場合、ステートメントは以下の通りです。
select u.id,u.name,
  (case u.sex
      when 1 then ' '
      when 2 then ' '
      else '  '
      end
   )  
 from users u;
 
                                     ID NAME                   
--------------------------------------- -------------------- ------
                                      1                      
                                      2                     
                                      3                      
                                      4                      
                                      5                     
                                      6                     
                                      7                     
                                      8                     
sumとcaseを結合して使用して、区分統計を実現できます。
select
  sum(case u.sex when 1 then 1 else 0 end)  ,
  sum(case u.sex when 2 then 1 else 0 end)  ,
  sum(case when u.sex <>1 and u.sex<>2 then 1 else 0 end)    
from users u;
 
                                
---------- ---------- ------------------
         3          2          0



select
  count(case when u.sex=1 then 1 end)  ,
  count(case when u.sex=2 then 1 end) ,
  count(case when u.sex <>1 and u.sex<>2 then 1 end)    
from users u;
 
                                
---------- ---------- -----------------
         3          2          0