SQL中case?when?then?else?end用法實(shí)例
一、闡述
case when then else end 可以理解為java的if-else if -else??梢岳斫鉃榱鞒炭刂普Z(yǔ)句或條件控制語(yǔ)句??梢詫?shí)現(xiàn)資料獲取的時(shí)候,可以更多的條件和自定義邏輯。
適用情景
- 對(duì)已知的數(shù)據(jù)庫(kù)中數(shù)據(jù),按照自己的邏輯,進(jìn)行自定義分組和數(shù)據(jù)分析
- 用此條件控制語(yǔ)句,實(shí)現(xiàn)自定義條件分組
- 條件控制語(yǔ)句中嵌套函數(shù)達(dá)到理想的計(jì)算效果
二、具體使用
1.已知數(shù)據(jù)按照另外一種方式進(jìn)行分組,分析。
有如下數(shù)據(jù):(為了看得更清楚,我并沒(méi)有使用國(guó)家代碼,而是直接用國(guó)家名作為primary key)
國(guó)家(country) | 人口(population) |
中國(guó) | 600 |
美國(guó) | 100 |
加拿大 | 100 |
英國(guó) | 200 |
法國(guó) | 300 |
日本 | 250 |
德國(guó) | 200 |
墨西哥 | 50 |
印度 | 250 |
根據(jù)這個(gè)國(guó)家人口數(shù)據(jù),統(tǒng)計(jì)亞洲和北美洲的人口數(shù)量。應(yīng)該得到下面這個(gè)結(jié)果。
洲 | 人口 |
亞洲 | 1100 |
北美洲 | 250 |
其他 | 700 |
想要解決這個(gè)問(wèn)題,假如使用case函數(shù),sql代碼如下:
select?sum(population), ??????????? case country ??????????? when '中國(guó)'???? then'亞洲' ??????????? when '印度'???? then'亞洲' ??????????? when '日本'???? then'亞洲' ??????????? when '美國(guó)'???? then'北美洲' ??????????? when '加拿大'? then'北美洲' ??????????? when '墨西哥'? then'北美洲' ??????????? else '其他' end ??????????? from???table_a ??????????? group by case country ??????????? when '中國(guó)'???? then'亞洲' ??????????? when '印度'???? then'亞洲' ??????????? when '日本'???? then'亞洲' ??????????? when '美國(guó)'???? then'北美洲' ??????????? when '加拿大'? then'北美洲' ??????????? when '墨西哥'? then'北美洲' ??????????? else '其他' end;
2.用一個(gè)sql語(yǔ)句完成不同條件的分組。
有如下數(shù)據(jù)
國(guó)家(country) | 性別(sex) | 人口(population) |
中國(guó) | 1 | 340 |
中國(guó) | 2 | 260 |
美國(guó) | 1 | 45 |
美國(guó) | 2 | 55 |
加拿大 | 1 | 51 |
加拿大 | 2 | 49 |
英國(guó) | 1 | 40 |
英國(guó) | 2 | 60 |
按照國(guó)家和性別進(jìn)行分組,得出結(jié)果如下
國(guó)家 | 男 | 女 |
中國(guó) | 340 | 260 |
美國(guó) | 45 | 55 |
加拿大 | 51 | 49 |
英國(guó) | 40 | 60 |
普通情況下,用union也可以實(shí)現(xiàn)用一條語(yǔ)句進(jìn)行查詢。但是那樣增加消耗(兩個(gè)select部分),而且sql語(yǔ)句會(huì)比較長(zhǎng)。
下面是一個(gè)是用case函數(shù)來(lái)完成這個(gè)功能的例子
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,完成對(duì)二維表的輸出形式,充分顯示了case函數(shù)的強(qiáng)大。
補(bǔ)充:對(duì)case when 的理解總結(jié)
1、then和else后,只能寫(xiě)一條輸出語(yǔ)句且輸出結(jié)果就是新生成列的值;when 后的條件判斷可以有多條,且可以多個(gè)字段聯(lián)合判斷;end 后的輸出也可以有多條,但必須有一個(gè)是新生成列的字段名; [常規(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,如果有多個(gè),如果一條記錄滿足第一個(gè)case when就不會(huì)再去執(zhí)行后面的case when,所以要想保證某個(gè)case when一定執(zhí)行,就把她寫(xiě)在最前面。
總結(jié)
到此這篇關(guān)于SQL中case when then else end用法的文章就介紹到這了,更多相關(guān)SQL case when then else end用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
openGauss數(shù)據(jù)庫(kù)共享存儲(chǔ)特性概述
這篇文章主要介紹了openGauss數(shù)據(jù)庫(kù)共享存儲(chǔ)特性簡(jiǎn)介,本特性提供主備機(jī)共享一份存儲(chǔ)的能力,實(shí)現(xiàn)基于磁陣設(shè)備的主備共享存儲(chǔ)HA部署形態(tài),可選通過(guò)OCK RDMA提升備機(jī)實(shí)時(shí)一致性讀能力,需要的朋友可以參考下2023-02-02
DBeaver之如何導(dǎo)出數(shù)據(jù)庫(kù)結(jié)構(gòu)和數(shù)據(jù)
這篇文章主要介紹了DBeaver之如何導(dǎo)出數(shù)據(jù)庫(kù)結(jié)構(gòu)和數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
ms SQL server數(shù)據(jù)庫(kù)備份、壓縮與SQL數(shù)據(jù)庫(kù)數(shù)據(jù)處理的方法
ms SQL server數(shù)據(jù)庫(kù)備份、壓縮與SQL數(shù)據(jù)庫(kù)數(shù)據(jù)處理的方法...2007-07-07
gaussDB數(shù)據(jù)庫(kù)常用操作命令詳解
這篇文章主要介紹了gaussDB數(shù)據(jù)庫(kù)常用操作命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
數(shù)據(jù)庫(kù) 左連接 右連接 全連接用法小結(jié)
在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)中,表建立時(shí)各數(shù)據(jù)之間的關(guān)系不必確定,常把一個(gè)實(shí)體的所有信息存放在一個(gè)表中。2008-08-08
DBeaver復(fù)制數(shù)據(jù)庫(kù)圖文教程(數(shù)據(jù)庫(kù)表結(jié)構(gòu)以及內(nèi)容)
DBeaver提供一個(gè)圖形界面用來(lái)查看數(shù)據(jù)庫(kù)結(jié)構(gòu)、執(zhí)行SQL查詢和腳本,下面這篇文章主要給大家介紹了關(guān)于DBeaver復(fù)制數(shù)據(jù)庫(kù)(數(shù)據(jù)庫(kù)表結(jié)構(gòu)以及內(nèi)容)的相關(guān)資料,需要的朋友可以參考下2024-01-01
SQL中游標(biāo)(cursor)的基本使用實(shí)例
當(dāng)你檢索的數(shù)據(jù)只是一條記錄時(shí),你所編寫(xiě)的事務(wù)語(yǔ)句代碼往往使用SELECT INSERT語(yǔ)句,但如果從某一結(jié)果集中逐一地讀取一條記錄呢?游標(biāo)為我們提供了一種極為優(yōu)秀的解決方案,這篇文章主要給大家介紹了關(guān)于SQL中游標(biāo)(cursor)基本使用的相關(guān)資料,需要的朋友可以參考下2021-11-11

