SQLのcase when then用法とsum(case when then else end)を組み合わせて使用する
3266 ワード
caseには2つのフォーマットがあります.単純case関数とcase検索関数.
この2つの方式は、同じ機能を実現することができる.簡単なcase関数の書き方は比較的簡潔ですが、case検索関数に比べて機能面で制限があります.
判定式を書く.
もう1つ注意しなければならない問題は、case関数が最初の条件に合致する値だけを返し、残りのcase部分は自動的に無視されます.
次の例を示します.
まず、id、name、sexの3つのフィールドを含むusersテーブルを作成します.テーブルの内容は次のとおりです.
1、上の表の結果の「sex」はコードで表され、コードを中国語で表したい.
文でcase文を使用できます.
2、sumとcaseを組み合わせて使用し、セグメント統計を実現することができる.
上記の表の性別の数を統計したい場合は、sql文は次のようになります.
-- 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