SQLのcase when then用法
3107 ワード
原文のリンク:https://www.cnblogs.com/Richardzhu/p/3571670.html
caseは二種類のフォーマットを持っています。簡単なcase関数とcase検索関数
もう一つ重要な問題があります。case関数は最初の該当条件の値だけ返します。残りのcase部分は自動的に無視されます。
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