sql中COALESCE函數(shù)的使用小結(jié)
在SQL中,COALESCE
函數(shù)是一個非常有用的函數(shù),用于從其參數(shù)列表中返回第一個非NULL
值。如果所有給定的參數(shù)都是NULL
,那么COALESCE
函數(shù)將返回NULL
。這個函數(shù)可以接受多個參數(shù),使其在處理可能出現(xiàn)的NULL
值時非常靈活和強(qiáng)大。
語法
COALESCE(expression1, expression2, ..., expressionN)
expression1, expression2, ..., expressionN
:是COALESCE
函數(shù)要檢查的表達(dá)式列表。函數(shù)會從左到右評估這些表達(dá)式,返回第一個非NULL
的表達(dá)式值。
使用場景
- 默認(rèn)值設(shè)置:當(dāng)你希望某個列或表達(dá)式返回一個默認(rèn)值(而不是
NULL
)時,COALESCE
可以提供這個默認(rèn)值。這對于數(shù)據(jù)報(bào)告和用戶界面顯示特別有用,因?yàn)槟憧梢员苊怙@示NULL
值,而是顯示一個更有意義的默認(rèn)值。 - 數(shù)據(jù)清洗:在處理含有
NULL
值的數(shù)據(jù)時,COALESCE
可以幫助你將這些NULL
值轉(zhuǎn)換為實(shí)際的數(shù)值或文本,便于分析和計(jì)算。 - 條件選擇:
COALESCE
可以用于基于數(shù)據(jù)存在性(是否為NULL
)條件性地選擇值。
示例
假設(shè)你有一個Employees
表,其中包含員工的salary
列,你想要選擇一個列,顯示員工的薪水,如果薪水是NULL
,則顯示0
。
SELECT COALESCE(salary, 0) AS effective_salary FROM Employees;
這個查詢通過COALESCE
函數(shù)確保了effective_salary
列不會包含NULL
值;如果salary
是NULL
,則effective_salary
會顯示為0
。
小結(jié)
COALESCE
函數(shù)提供了一種簡單有效的方式來處理SQL查詢中的NULL
值,使得數(shù)據(jù)分析和展示更加靈活和清晰。它是處理NULL
值時應(yīng)該考慮的首選函數(shù)之一,特別是當(dāng)你需要從一組可能的NULL
值中選擇第一個實(shí)際存在的值時。
leetcode例題:1378. 使用唯一標(biāo)識碼替換員工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)識碼(unique ID)。
展示每位用戶的 唯一標(biāo)識碼(unique ID );如果某位員工沒有唯一標(biāo)識碼,使用 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 沒有唯一標(biāo)識碼, 因此我們使用 null 替代。 Meir 的唯一標(biāo)識碼是 2 。 Winston 的唯一標(biāo)識碼是 3 。 Jonathan 唯一標(biāo)識碼是 1 。
解答
要解決這個問題,你可以使用 SQL 的 LEFT JOIN
語句來連接 Employees
表和 EmployeeUNI
表,并且使用 COALESCE
函數(shù)來處理那些沒有匹配 unique_id
的情況,將它們填充為 NULL
。LEFT JOIN
會返回左表 (Employees
) 的所有行,如果左表的行在右表 (EmployeeUNI
) 中沒有匹配行,則結(jié)果中對應(yīng)行的 EmployeeUNI
表列會包含 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
這個查詢做了以下事情:
FROM Employees E
- 從Employees
表開始,為表設(shè)置了一個別名E
以簡化后續(xù)引用。LEFT JOIN EmployeeUNI EU ON E.id = EU.id
- 通過LEFT JOIN
將Employees
表和EmployeeUNI
表連接起來,基于兩表的id
字段。EmployeeUNI
表也被賦予了別名EU
。COALESCE(EU.unique_id, NULL) AS unique_id
-COALESCE
函數(shù)返回其參數(shù)列表中的第一個非NULL
值。在這里,如果EU.unique_id
是NULL
(意味著LEFT JOIN
沒有找到匹配的行),則結(jié)果仍然是NULL
。雖然在這種情況下使用COALESCE
函數(shù)可能看起來多余(因?yàn)?nbsp;EU.unique_id
本身在沒有匹配的情況下就是NULL
),但它在這里說明了如何處理可能的NULL
值。實(shí)際上,你可以直接選擇EU.unique_id
。ORDER BY E.id
- 結(jié)果按照員工的id
排序。這一步是可選的,取決于你想如何展示結(jié)果。
注意,這個查詢確保了即使某些員工沒有對應(yīng)的 unique_id
,他們的名字仍然會出現(xiàn)在查詢結(jié)果中,unique_id
列用 NULL
表示他們?nèi)鄙傥ㄒ粯?biāo)識碼。
到此這篇關(guān)于sql中COALESCE函數(shù)的使用小結(jié)的文章就介紹到這了,更多相關(guān)sql COALESCE函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL 尚未定義空閑 CPU 條件 - OnIdle 作業(yè)計(jì)劃將不起任何作用
今天在配置sql server 代理服務(wù)器的計(jì)劃任務(wù)的時候發(fā)現(xiàn)了日志中提示這個SQL 尚未定義空閑 CPU 條件 - OnIdle 作業(yè)計(jì)劃將不起任何作用信息導(dǎo)致無法執(zhí)行計(jì)劃任務(wù),那么可以按照下面的方法解決即可2021-06-06sqlserverdriver配置方法 jdbc連接sqlserver
這篇文章主要介紹了sqlserverdriver配置方法,介紹了連接SqlServer2000 和連接SqlServer2005的方法,大家參考使用吧2014-01-01解決無法在unicode和非unicode字符串?dāng)?shù)據(jù)類型之間轉(zhuǎn)換的方法詳解
本篇文章是對無法在unicode和非unicode字符串?dāng)?shù)據(jù)類型之間轉(zhuǎn)換的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06sql多表行轉(zhuǎn)列、級聯(lián)行轉(zhuǎn)列示例代碼
這篇文章主要介紹了sql多表行轉(zhuǎn)列、級聯(lián)行轉(zhuǎn)列示例代碼,需要的朋友可以參考下2014-03-03Windows下SQL Serever 2012徹底卸載刪除教程
這篇文章主要為大家詳細(xì)介紹了Windows下SQL Serever2012徹底卸載刪除的教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03完美解決SQL server2005中插入漢字變成問號的問題
以下是對在SQL server2005中插入漢字變成問號的解決辦法進(jìn)行了分析介紹。需要的朋友可以過來參考下2013-08-08數(shù)據(jù)庫中的內(nèi)容字段被掛馬的替換方法 SQL注入
有時候有些數(shù)據(jù)庫被掛馬了,如果是sqlserver數(shù)據(jù)庫,就可以用下面的方法,不過,這樣的方法比較適合懂sqlserver的朋友,不過不懂的朋友也可以用,一些數(shù)據(jù)庫的在線管理程序替換。2009-08-08SQL Server 2017無法連接到服務(wù)器的問題解決
本文主要介紹了SQL Server 2017無法連接到服務(wù)器的問題解決,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09