SQL中case?when?then?else?end用法實例
一、闡述
case when then else end 可以理解為java的if-else if -else。可以理解為流程控制語句或條件控制語句。可以實現(xiàn)資料獲取的時候,可以更多的條件和自定義邏輯。
適用情景
- 對已知的數(shù)據(jù)庫中數(shù)據(jù),按照自己的邏輯,進行自定義分組和數(shù)據(jù)分析
- 用此條件控制語句,實現(xiàn)自定義條件分組
- 條件控制語句中嵌套函數(shù)達到理想的計算效果
二、具體使用
1.已知數(shù)據(jù)按照另外一種方式進行分組,分析。
有如下數(shù)據(jù):(為了看得更清楚,我并沒有使用國家代碼,而是直接用國家名作為primary key)
國家(country) | 人口(population) |
中國 | 600 |
美國 | 100 |
加拿大 | 100 |
英國 | 200 |
法國 | 300 |
日本 | 250 |
德國 | 200 |
墨西哥 | 50 |
印度 | 250 |
根據(jù)這個國家人口數(shù)據(jù),統(tǒng)計亞洲和北美洲的人口數(shù)量。應該得到下面這個結果。
洲 | 人口 |
亞洲 | 1100 |
北美洲 | 250 |
其他 | 700 |
想要解決這個問題,假如使用case函數(shù),sql代碼如下:
select?sum(population), ??????????? case country ??????????? when '中國'???? then'亞洲' ??????????? when '印度'???? then'亞洲' ??????????? when '日本'???? then'亞洲' ??????????? when '美國'???? then'北美洲' ??????????? when '加拿大'? then'北美洲' ??????????? when '墨西哥'? then'北美洲' ??????????? else '其他' end ??????????? from???table_a ??????????? group by case country ??????????? when '中國'???? then'亞洲' ??????????? when '印度'???? then'亞洲' ??????????? when '日本'???? then'亞洲' ??????????? when '美國'???? then'北美洲' ??????????? when '加拿大'? then'北美洲' ??????????? when '墨西哥'? then'北美洲' ??????????? else '其他' end;
2.用一個sql語句完成不同條件的分組。
有如下數(shù)據(jù)
國家(country) | 性別(sex) | 人口(population) |
中國 | 1 | 340 |
中國 | 2 | 260 |
美國 | 1 | 45 |
美國 | 2 | 55 |
加拿大 | 1 | 51 |
加拿大 | 2 | 49 |
英國 | 1 | 40 |
英國 | 2 | 60 |
按照國家和性別進行分組,得出結果如下
國家 | 男 | 女 |
中國 | 340 | 260 |
美國 | 45 | 55 |
加拿大 | 51 | 49 |
英國 | 40 | 60 |
普通情況下,用union也可以實現(xiàn)用一條語句進行查詢。但是那樣增加消耗(兩個select部分),而且sql語句會比較長。
下面是一個是用case函數(shù)來完成這個功能的例子
select country, ??????????? sum( case when sex = '1' then ??????????? population else 0 end),? --男性人口 ??????????? sum( case when sex = '2' then ??????????? population else 0 end)?? --女性人口 ??????????? from?table_a ??????????? group by country;
這樣我們使用select,完成對二維表的輸出形式,充分顯示了case函數(shù)的強大。
補充:對case when 的理解總結
1、then和else后,只能寫一條輸出語句且輸出結果就是新生成列的值;when 后的條件判斷可以有多條,且可以多個字段聯(lián)合判斷;end 后的輸出也可以有多條,但必須有一個是新生成列的字段名; [常規(guī)用法:select 后到from前,直接使用case when] (例1)
2、when 后多條件判斷用and連接(例3)
3、case when 巧妙用法 [order by 后用case when] [count()中用case when] (例2)
4、group by 后用case when (在參考里)
5、case when,如果有多個,如果一條記錄滿足第一個case when就不會再去執(zhí)行后面的case when,所以要想保證某個case when一定執(zhí)行,就把她寫在最前面。
總結
到此這篇關于SQL中case when then else end用法的文章就介紹到這了,更多相關SQL case when then else end用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
dapper使用Insert或update時部分字段不映射到數(shù)據(jù)庫
我們在使用dapper的insert或update方法時可能會遇見一些實體中存在的字段但是,數(shù)據(jù)庫中不存在的字段,這樣在使用insert時就是拋出異常提示字段不存在,這個時候該怎么解決呢,下面給大家分享示例實體代碼,感興趣的朋友一起看看吧2023-12-12最新DataGrip2020.2.x破解版激活碼的步驟詳解(支持Mac/Windows/Linux)
這篇文章主要介紹了最新DataGrip2020.2.x破解版激活碼教程詳解(支持Mac/Windows/Linux),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11達夢數(shù)據(jù)庫如何設置自增主鍵的方法及注意事項
這篇文章主要介紹了達夢數(shù)據(jù)庫如何設置自增主鍵的方法及注意事項的相關資料,在達夢數(shù)據(jù)庫中實現(xiàn)自增字段通常需要使用序列(sequence)和觸發(fā)器(trigger),需要的朋友可以參考下2024-09-09Navicat?Premium12進行數(shù)據(jù)庫定期自動備份的方法步驟
本文主要介紹了Navicat?Premium?12進行數(shù)據(jù)庫定期自動備份,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02