1. 程式人生 > >【統計】SQL之case when then else end用法(用於分類統計)(一)

【統計】SQL之case when then else end用法(用於分類統計)(一)

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  
複製程式碼複製程式碼

這兩種方式,可以實現相同的功能。簡單case函式的寫法相對比較簡潔,但是和case搜尋函式相比,功能方面會有些限制,比如寫判定式。

還有一個需要注重的問題,case函式只返回第一個符合條件的值,剩下的case部分將會被自動忽略。

--比如說,下面這段sql,你永遠無法得到“第二類”這個結果
case when col_1 in ('a','b') then '第一類'
     when col_1 in ('a') then '第二類'
     else '其他' end  

下面例項演示:

首先建立一張users表,其中包含id,name,sex三個欄位,表內容如下:

複製程式碼複製程式碼
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,'張一');
 
1 row inserted
SQL> insert into users(id,name,sex) values(2,'張二',1);
 
1 row inserted
SQL> insert into users(id,name) values(3,'張三');
 
1 row inserted
SQL> insert into users(id,name) values(4,'張四');
 
1 row inserted
SQL> insert into users(id,name,sex) values(5,'張五',2);
 
1 row inserted
SQL> insert into users(id,name,sex) values(6,'張六',1);
 
1 row inserted
SQL> insert into users(id,name,sex) values(7,'張七',2);
 
1 row inserted
SQL> insert into users(id,name,sex) values(8,'張八',1);
 
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
 
8 rows selected
複製程式碼複製程式碼

1、上表結果中的"sex"是用程式碼表示的,希望將程式碼用中文表示。可在語句中使用case語句:

複製程式碼複製程式碼
SQL> select u.id,u.name,u.sex,
  2    (case u.sex
  3      when 1 then ''
  4      when 2 then ''
  5      else '空的'
  6      end
  7     )性別
  8  from users u;
 
                                     ID NAME                        SEX 性別
--------------------------------------- -------------------- ---------- ------
                                      1 張一                            空的
                                      2 張二                          13 張三                            空的
                                      4 張四                            空的
                                      5 張五                          26 張六                          17 張七                          28 張八                          18 rows selected
複製程式碼複製程式碼

2、如果不希望列表中出現"sex"列,語句如下:

複製程式碼複製程式碼
SQL> select u.id,u.name,
  2    (case u.sex
  3      when 1 then ''
  4      when 2 then ''
  5      else '空的'
  6      end
  7     )性別
  8  from users u;
 
                                     ID NAME                 性別
--------------------------------------- -------------------- ------
                                      1 張一                 空的
                                      2 張二                 男
                                      3 張三                 空的
                                      4 張四                 空的
                                      5 張五                 女
                                      6 張六                 男
                                      7 張七                 女
                                      8 張八                 男
 
8 rows selected
複製程式碼複製程式碼

3、將sum與case結合使用,可以實現分段統計。
     如果現在希望將上表中各種性別的人數進行統計,sql語句如下:

複製程式碼
SQL> select
  2    sum(case u.sex when 1 then 1 else 0 end)男性,
  3    sum(case u.sex when 2 then 1 else 0 end)女性,
  4    sum(case when u.sex <>1 and u.sex<>2 then 1 else 0 end)性別為空
  5  from users u;
 
        男性         女性       性別為空
---------- ---------- ----------
         3          2          0

--------------------------------------------------------------------------------
SQL> select
  2    count(case when u.sex=1 then 1 end)男性,
  3    count(case when u.sex=2 then 1 end)女,
  4    count(case when u.sex <>1 and u.sex<>2 then 1 end)性別為空
  5  from users u;
 
        男性          女       性別為空
---------- ---------- ----------
         3          2          0
複製程式碼

附:我實驗的結果

(注意性別為空的地方,應該判斷u.sex is null 而不能用 not in或不等於符號去排除)


轉載自:https://www.cnblogs.com/qlqwjy/p/7476533.html

相關推薦

統計SQLcase when then else end用法(用於分類統計)

case具有兩種格式。簡單case函式和case搜尋函式。--簡單case函式 case sex when '1' then '男' when '2' then '女’ else '其他' end --case搜尋函式 case when sex = '1' th

SQLcase when then else end用法

一、簡單用法 case具有兩種格式。簡單case函式和case搜尋函式。 簡單case函式 SELECT s.s_id, s.s_name, s.s_sex, CASE WHEN s.s_sex = '1' THEN '男' WHEN s.s_s

oraclecase when then else end用法詳解

闡述 case when then else end 可以理解為java的if-else if -else。是流程控制語句或者條件控制語句,可以自定義邏輯 使用場景 對已知的資料進行邏輯分組或者進

統計SQL中的case when then else end用法

轉載自:https://www.cnblogs.com/prefect/p/5746624.html(一)和(二)的文章開頭一樣,後面例子不一樣Case具有兩種格式。簡單Case函式和Case搜尋函式。--簡單Case函式 CASE sex WHEN '1'

語法SQL中的case when then else end用法-解決一個字段根據條件取不同值

where 運行 pos 功能 enter cnblogs logs wro img Case具有兩種格式。簡單Case函數和Case搜索函數。 --簡單Case函數 CASE sex WHEN ‘1‘ THEN ‘男‘ WHEN

SQL中的case when then else end用法

Case具有兩種格式。簡單Case函式和Case搜尋函式。 --簡單Case函式 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜尋函式 CASE

SQLcase when ...then...else ...and用法

CASE WHEN 基本概念 Case具有兩種格式:簡單Case函式和Case搜尋函式。 簡單Case函式: CASE sex WHEN ‘1’ THEN ‘男’ WHEN ‘0’ THEN ‘女’ ELSE ‘其他’ END Case搜尋函式:

SQL利用Case When Then Else End 多條件判斷

  Select Case     When a is not null then a     When b is not null then b     When c is not null then c     When d is not null then d    

oracle中的case when then else end 用法

values ID 你在 union 形式 sql語句 建議 而是 acl Case when 的用法,簡單Case函數 簡單CASE表達式,使用表達式確定返回值.   語法:   CASE search_expression   WHEN expression1 T

mysql 分組、 操作查詢結果case when then else end用法舉例

Case具有兩種格式。簡單Case函式和Case搜尋函式。  --簡單Case函式  CASE sex           WHEN '1' THEN '男'           WHEN '2' THEN '女'  ELSE '其他' END  --Case搜尋函式 

mysql操作查詢結果case when then else end用法舉例

Case具有兩種格式。簡單Case函式和Case搜尋函式。 --簡單Case函式 CASE sex          WHEN '1' THEN '男'          WHEN '2' THEN '女' ELSE '其他' END --Case搜尋函式 CASE WHEN sex = '1' THEN '

oracle case when then else end用法

語法:   CASE search_expression   當表達1那麼結果1   當表達2那麼結果2 比如客戶型別個人0,機構1,產品2對應的證件型別分別對應1018,1019,1355字典項。 下面舉例說明具體實現:如何把某客戶型別對應的證件型別翻譯成中文

SQLcase when then用法(用於分類統計)

char purge 格式 但是 統計 spa 比較 log 永遠 ase具有兩種格式。簡單case函數和case搜索函數。 --簡單case函數 case sex when ‘1‘ then ‘男‘ when ‘2‘ then ‘女’

SQLcase when then用法

case具有兩種格式:                              簡單case函式;                             case搜尋函式; --簡單case函式 case sex when '1' then '男' when

case when then else end 語句遇上sum或count等統計函式轉載

轉載:https://blog.csdn.net/qq_18875541/article/details/69392355  事情是因為這樣了——我需要按2個維度來分組,求出按這2個維度分組的總數情況(count),但同時也需要在這2個維度下求出按不同條件得出的總數,這些不同條件下分別

SQL中的case when then else end詳細用法

Case具有兩種格式。簡單Case函式和Case搜尋函式 --簡單Case函式 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜尋函式 CASE WHE

case when then else end 語句遇上sum或count等統計函式

事情是因為這樣了——我需要按2個維度來分組,求出按這2個維度分組的總數情況(count),但同時也需要在這2個維度下求出按不同條件得出的總數,這些不同條件下分別得出的總數相加的和即為不加上條件的情況下的總數。比如: 假設有一張tablename表格,資料結構如下:    欄位: id  A   B    c

mysql中LOCATE和CASE WHEN...THEN...ELSE...END結合用法

else case put asdf span 項目 oos bstr col 之前項目中需要寫一個sql,就是查出某個調研詳情中,選A答案,B答案,C答案...F答案的人各有多少人,這個sql也是費了很大的力氣才寫出來,故記下來,方便以後使用。 其中tbl_researc

MySql 中 case when then else end用法

sta 結束 name cas ber sel 如果 user num MySql 中 case when then else end 的用法 解釋: SELECT case ----------

MySql 中關鍵字 case when then else end用法

img closed sta bsp sql hid not weight one 解釋: 1 SELECT 2 case -------------如果 3 when sex=‘1‘ then