SQLのcase when then用法とsum(case when then else end)を組み合わせて使用する

3266 ワード

caseには2つのフォーマットがあります.単純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検索関数に比べて機能面で制限があります.
判定式を書く.
もう1つ注意しなければならない問題は、case関数が最初の条件に合致する値だけを返し、残りのcase部分は自動的に無視されます.
--   ,    sql,       “   ”    
case when col_1 in ('a','b') then '   '
     when col_1 in ('a') then '   '
     else '  ' end  

次の例を示します.
まず、id、name、sexの3つのフィールドを含むusersテーブルを作成します.テーブルの内容は次のとおりです.
SQL> drop table users purge;
 
drop table users purge
 
ORA-00942:        
SQL> create table users(id int,name varchar2(20),sex number);
 
Table created
SQL> insert into users(id,name) values(1,'  ');
row inserted
SQL> insert into users(id,name,sex) values(2,'  ',1);
row inserted
SQL> insert into users(id,name) values(3,'  ');
row inserted
SQL> insert into users(id,name) values(4,'  ');
row inserted
SQL> insert into users(id,name,sex) values(5,'  ',2);
row inserted
SQL> insert into users(id,name,sex) values(6,'  ',1);
row inserted
SQL> insert into users(id,name,sex) values(7,'  ',2);
row inserted
SQL> insert into users(id,name,sex) values(8,'  ',1);
row inserted
SQL> commit;
 
Commit complete
SQL> select * from users;
 
 ID                  NAME                        SEX
------------------------------------------------------------
1						                   
2						                            1
3						                   
4					                       
5						                            2
6						                            1
7						                            2
8						                            1

1、上の表の結果の「sex」はコードで表され、コードを中国語で表したい.
文でcase文を使用できます.
SQL> 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                    

2、sumとcaseを組み合わせて使用し、セグメント統計を実現することができる.
上記の表の性別の数を統計したい場合は、sql文は次のようになります.
SQL> 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             3