SQL中COALESCE函數(shù)使用場(chǎng)景分析
在SQL中,COALESCE函數(shù)是一個(gè)非常有用的函數(shù),用于從其參數(shù)列表中返回第一個(gè)非NULL值。如果所有給定的參數(shù)都是NULL,那么COALESCE函數(shù)將返回NULL。這個(gè)函數(shù)可以接受多個(gè)參數(shù),使其在處理可能出現(xiàn)的NULL值時(shí)非常靈活和強(qiáng)大。
語(yǔ)法
COALESCE(expression1, expression2, ..., expressionN)
expression1, expression2, ..., expressionN:是COALESCE函數(shù)要檢查的表達(dá)式列表。函數(shù)會(huì)從左到右評(píng)估這些表達(dá)式,返回第一個(gè)非NULL的表達(dá)式值。
使用場(chǎng)景
- 默認(rèn)值設(shè)置:當(dāng)你希望某個(gè)列或表達(dá)式返回一個(gè)默認(rèn)值(而不是
NULL)時(shí),COALESCE可以提供這個(gè)默認(rèn)值。這對(duì)于數(shù)據(jù)報(bào)告和用戶界面顯示特別有用,因?yàn)槟憧梢员苊怙@示NULL值,而是顯示一個(gè)更有意義的默認(rèn)值。 - 數(shù)據(jù)清洗:在處理含有
NULL值的數(shù)據(jù)時(shí),COALESCE可以幫助你將這些NULL值轉(zhuǎn)換為實(shí)際的數(shù)值或文本,便于分析和計(jì)算。 - 條件選擇:
COALESCE可以用于基于數(shù)據(jù)存在性(是否為NULL)條件性地選擇值。
示例
假設(shè)你有一個(gè)Employees表,其中包含員工的salary列,你想要選擇一個(gè)列,顯示員工的薪水,如果薪水是NULL,則顯示0。
SELECT COALESCE(salary, 0) AS effective_salary FROM Employees;
這個(gè)查詢通過(guò)COALESCE函數(shù)確保了effective_salary列不會(huì)包含NULL值;如果salary是NULL,則effective_salary會(huì)顯示為0。
小結(jié)
COALESCE函數(shù)提供了一種簡(jiǎn)單有效的方式來(lái)處理SQL查詢中的NULL值,使得數(shù)據(jù)分析和展示更加靈活和清晰。它是處理NULL值時(shí)應(yīng)該考慮的首選函數(shù)之一,特別是當(dāng)你需要從一組可能的NULL值中選擇第一個(gè)實(shí)際存在的值時(shí)。
leetcode例題:1378. 使用唯一標(biāo)識(shí)碼替換員工ID
題目描述
Employees 表:
+---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | name | varchar | +---------------+---------+ 在 SQL 中,id 是這張表的主鍵。 這張表的每一行分別代表了某公司其中一位員工的名字和 ID 。
EmployeeUNI 表:
+---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | unique_id | int | +---------------+---------+ 在 SQL 中,(id, unique_id) 是這張表的主鍵。 這張表的每一行包含了該公司某位員工的 ID 和他的唯一標(biāo)識(shí)碼(unique ID)。
展示每位用戶的 唯一標(biāo)識(shí)碼(unique ID );如果某位員工沒(méi)有唯一標(biāo)識(shí)碼,使用 null 填充即可。
你可以以 任意 順序返回結(jié)果表。
返回結(jié)果的格式如下例所示。
示例 1:
輸入: Employees 表: +----+----------+ | id | name | +----+----------+ | 1 | Alice | | 7 | Bob | | 11 | Meir | | 90 | Winston | | 3 | Jonathan | +----+----------+ EmployeeUNI 表: +----+-----------+ | id | unique_id | +----+-----------+ | 3 | 1 | | 11 | 2 | | 90 | 3 | +----+-----------+ 輸出: +-----------+----------+ | unique_id | name | +-----------+----------+ | null | Alice | | null | Bob | | 2 | Meir | | 3 | Winston | | 1 | Jonathan | +-----------+----------+ 解釋: Alice and Bob 沒(méi)有唯一標(biāo)識(shí)碼, 因此我們使用 null 替代。 Meir 的唯一標(biāo)識(shí)碼是 2 。 Winston 的唯一標(biāo)識(shí)碼是 3 。 Jonathan 唯一標(biāo)識(shí)碼是 1 。
解答
要解決這個(gè)問(wèn)題,你可以使用 SQL 的 LEFT JOIN 語(yǔ)句來(lái)連接 Employees 表和 EmployeeUNI 表,并且使用 COALESCE 函數(shù)來(lái)處理那些沒(méi)有匹配 unique_id 的情況,將它們填充為 NULL。LEFT JOIN 會(huì)返回左表 (Employees) 的所有行,如果左表的行在右表 (EmployeeUNI) 中沒(méi)有匹配行,則結(jié)果中對(duì)應(yīng)行的 EmployeeUNI 表列會(huì)包含 NULL 值。
以下是實(shí)現(xiàn)該邏輯的 SQL 查詢:
SELECT
COALESCE(EU.unique_id, NULL) AS unique_id,
E.name
FROM
Employees E
LEFT JOIN
EmployeeUNI EU ON E.id = EU.id
ORDER BY
E.id; -- 或者根據(jù)需要排序,比如按照 name 或 unique_id
這個(gè)查詢做了以下事情:
FROM Employees E- 從Employees表開(kāi)始,為表設(shè)置了一個(gè)別名E以簡(jiǎn)化后續(xù)引用。LEFT JOIN EmployeeUNI EU ON E.id = EU.id- 通過(guò)LEFT JOIN將Employees表和EmployeeUNI表連接起來(lái),基于兩表的id字段。EmployeeUNI表也被賦予了別名EU。COALESCE(EU.unique_id, NULL) AS unique_id-COALESCE函數(shù)返回其參數(shù)列表中的第一個(gè)非NULL值。在這里,如果EU.unique_id是NULL(意味著LEFT JOIN沒(méi)有找到匹配的行),則結(jié)果仍然是NULL。雖然在這種情況下使用COALESCE函數(shù)可能看起來(lái)多余(因?yàn)?EU.unique_id本身在沒(méi)有匹配的情況下就是NULL),但它在這里說(shuō)明了如何處理可能的NULL值。實(shí)際上,你可以直接選擇EU.unique_id。ORDER BY E.id- 結(jié)果按照員工的id排序。這一步是可選的,取決于你想如何展示結(jié)果。
注意,這個(gè)查詢確保了即使某些員工沒(méi)有對(duì)應(yīng)的 unique_id,他們的名字仍然會(huì)出現(xiàn)在查詢結(jié)果中,unique_id 列用 NULL 表示他們?nèi)鄙傥ㄒ粯?biāo)識(shí)碼。
到此這篇關(guān)于SQL中COALESCE函數(shù)使用場(chǎng)景分析的文章就介紹到這了,更多相關(guān)sql coalesce函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 快速掌握SQL?中的?COALESCE、NULLIF?和?IFNULL?函數(shù)
- sql中COALESCE函數(shù)的使用小結(jié)
- postgresql 中的COALESCE()函數(shù)使用小技巧
- PostgreSQL COALESCE使用方法代碼解析
- mysql中null(IFNULL,COALESCE和NULLIF)相關(guān)知識(shí)點(diǎn)總結(jié)
- mysql中coalesce()的使用技巧小結(jié)
- mysql中替代null的IFNULL()與COALESCE()函數(shù)詳解
- SQL Server COALESCE函數(shù)詳解及實(shí)例
- 淺析SQL Server的分頁(yè)方式 ISNULL與COALESCE性能比較
相關(guān)文章
MSSQL 將截?cái)嘧址蚨M(jìn)制數(shù)據(jù)問(wèn)題的解決方法
主要原因就是給某個(gè)字段賦值時(shí),內(nèi)容大于字段的長(zhǎng)度或類型不符造成的2010-10-10
將string數(shù)組轉(zhuǎn)化為sql的in條件用sql查詢
將string數(shù)組轉(zhuǎn)化為sql的in條件就可以用sql查詢了,下面是具體是的示例,大家可以參考下2014-05-05
MsSQL數(shù)據(jù)庫(kù)基礎(chǔ)與庫(kù)的基本操作方法
文章主要介紹了數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí),包括數(shù)據(jù)庫(kù)的定義、主流數(shù)據(jù)庫(kù)系統(tǒng)(如MySQL、PostgreSQL等)、數(shù)據(jù)庫(kù)操作(如創(chuàng)建、修改、刪除數(shù)據(jù)庫(kù),備份和恢復(fù)等)以及查看連接情況,感興趣的朋友一起看看吧2025-02-02
SQL Server使用腳本實(shí)現(xiàn)自動(dòng)備份的思路詳解
這篇文章主要介紹了SQL Server使用腳本實(shí)現(xiàn)自動(dòng)備份的思路詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
Microsoft SQLServer的版本區(qū)別及選擇
Microsoft SQLServer的版本區(qū)別及選擇...2007-02-02
SQL?Server中的XML數(shù)據(jù)類型詳解
本文詳細(xì)講解了SQL?Server中的XML數(shù)據(jù)類型,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
清除SQL?Server數(shù)據(jù)庫(kù)日志(ldf文件)的方法匯總
隨著系統(tǒng)運(yùn)行時(shí)間的推移,數(shù)據(jù)庫(kù)日志文件會(huì)變得越來(lái)越大,這時(shí)我們需要對(duì)日志文件進(jìn)行備份或清理,這篇文章主要介紹了清除SQL?Server數(shù)據(jù)庫(kù)日志(ldf文件)的幾種方法,需要的朋友可以參考下2022-10-10
SQLServer數(shù)據(jù)庫(kù)處于恢復(fù)掛起狀態(tài)的解決辦法
這篇文章主要介紹了SQLServer數(shù)據(jù)庫(kù)處于恢復(fù)掛起狀態(tài)的解決辦法 ,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
SQLServer中的切割字符串SplitString函數(shù)
有時(shí)我們要用到批量操作時(shí)都會(huì)對(duì)字符串進(jìn)行拆分,可是SQL Server中卻沒(méi)有自帶Split函數(shù),所以要自己來(lái)實(shí)現(xiàn)了。沒(méi)什么好說(shuō)的,需要的朋友直接拿去用吧2011-11-11

