日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

前言

作用: 可以使用它們在數據庫進行判斷功能,跟代碼中的if...else功能一樣.但是,它們又存在差異,下面就來講它們的具體作用和差別。

一: 使用語法

   (一)普通case函數

CASE  <表達式>
   WHEN <值1> THEN <操作>
   WHEN <值2> THEN <操作>
   ...   ELSE <操作>
END 

   (二 )搜索case函數

CASE
    WHEN <條件1> THEN <命令>
    WHEN <條件2> THEN <命令>
    ...    ELSE commandsEND

作用一: 結合分組統計數據

   需求: 將下圖的數據按照"洲"進行統計總人數

三分鐘搞懂SQL的Case函數

源數據

   (一)方式一: 使用普通的case函數進行統計

  select (
  case name 
   when '中國' then '亞洲'
   when '日本' then '亞洲'
   when '美國' then '北美洲'
   when '加拿大' then '北美洲'
  else '其他' end
  ) 洲,  sum(population) 總數 
  from t_country
  GROUP BY
  (  case name 
   when '中國' then '亞洲'
   when '日本' then '亞洲'
   when '美國' then '北美洲'
   when '加拿大' then '北美洲'
  else '其他' end
  )

  統計結果:

三分鐘搞懂SQL的Case函數

統計結果

   (二)方式二: 使用搜索的case函數進行統計

 select (
  case  
  when name in('中國','日本') then '亞洲'
  when name in('美國','加拿大') then '北美洲'
  else '其他' end
 ) 洲, sum(population) 總數 
 from t_country
 GROUP BY
 (  case  
  when name in('中國','日本') then '亞洲'
  when name in('美國','加拿大') then '北美洲'
  else '其他' end
 )

  統計結果

三分鐘搞懂SQL的Case函數

統計結果

作用二: 分條件更新字段值

   (一)需求: 將工資低于3000的員工漲幅工資20%,工資等于高于3000的員工漲幅8%,數據如下:

三分鐘搞懂SQL的Case函數

源數據

   可能看到此需求,有人第一想法就是直接通過如下兩條update語句直接更新:

update t_salary set salary = salary + (salary * 0.2) where salary < 3000;
update t_salary set salary = salary + (salary * 0.08) where salary >= 3000;

  但是,如果是這樣執行的話實際上會存在問題,比如:原來工資在2900的員工,執行完第一條語句后工資會變成3480,此時,再執行第二條更新語句,因為滿足工資大于三千,則又會去添加多8%的工資,這樣明顯就是不符合我們的需求的,所以,如果想完成這個需求,又不想寫太復雜的sql,可以通過case函數完成這個功能。

   (二)使用搜索的case函數進行分條件修改(此處不能使用簡單case函數,因為簡單case函數不能判斷帶范圍的條件)

update t_salary
 set 
 salary =  (  case 
   when salary < 3000 then salary + salary * 0.2
   when salary >= 3000 then salary + salary * 0.08
   else salary 
  end
 )

   (三)分條件修改后結果

三分鐘搞懂SQL的Case函數

結果

作用三: 檢查表中字段值是否一致

   (一)需求: 判斷兩個表中name字段值是否一致,并返回結果,數據如下:

三分鐘搞懂SQL的Case函數

源數據

   (二)使用搜索的case函數進行分條件修改(此處不能使用簡單case函數,因為簡單case函數不能判斷帶范圍的條件)

select name,
( case 
 when desciption in(select description from t_user2) then '一致'
 else '不一致'
 end
) 比較結果from t_user1

   (三)比較結果:

三分鐘搞懂SQL的Case函數

比較結果

作用四: 行轉列(重點-面試常見)

   (一)需求: 將表中數據按照每個學生姓名 、科目、成績進行排序,數據如下:

三分鐘搞懂SQL的Case函數

 

   (二)使用case函數轉換

// 使用普通case函數
SELECT NAME,
 max( CASE class WHEN '語文' THEN grade ELSE 0 END ) 語文,
 max( CASE class WHEN '數學' THEN grade ELSE 0 END ) 數學,
 max( CASE class WHEN '英語' THEN grade ELSE 0 END ) 英語 
FROM
 t_source GROUP BY
NAME// 使用搜索case函數
SELECT NAME,
 max( CASE  WHEN class = '語文' THEN grade ELSE 0 END ) 語文,
 max( CASE  WHEN class =  '數學' THEN grade ELSE 0 END ) 數學,
 max( CASE  WHEN class = '英語' THEN grade ELSE 0 END ) 英語 
FROM
 t_source GROUP BY
NAME

   (三)轉換結果

三分鐘搞懂SQL的Case函數

轉換結果

五:普通case函數和搜索case函數的區別

   通過上面的案例可看到,普通的case函數寫法相對簡潔,但是功能也相對簡單,搜索case函數的功能更加強大,具體如下:
   1、簡單case函數判斷條件只能是等于,而搜索case函數的條件可以是子查詢,In,大于、等于等等。   

2、如果只是使用簡單的條件分組,可以選擇普通case函數,如果需要判斷更多的場景,則選擇搜索case更好。

六:總結

   如果你想親自實踐,需要本文章的測試數據,可以私信回復: 【測試數據】即可


   看到此處,你應該對Case函數有了更深入的認識,但是、關于Case函數的使用遠遠不止這一篇文章描述的,還需要我們在實踐中去發現更多的可能,如果你看完本文覺得有疑問或者本文有錯誤的地方,歡迎私信或者在下方留言指出。


   碼字不易、如果你覺得本文對你有一點點幫助,可以點贊和關注!

分享到:
標簽:函數 Case
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定