马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在SQL中,COALESCE函数是一个非常有用的函数,用于从其参数列表中返回第一个非NULL值。假如全部给定的参数都是NULL,那么COALESCE函数将返回NULL。这个函数可以接受多个参数,使其在处理大概出现的NULL值时非常机动和强盛。
语法
- COALESCE(expression1, expression2, ..., expressionN)
复制代码
- expression1, expression2, ..., expressionN:是COALESCE函数要检查的表达式列表。函数会从左到右评估这些表达式,返回第一个非NULL的表达式值。
利用场景
- 默认值设置:当你盼望某个列或表达式返回一个默认值(而不是NULL)时,COALESCE可以提供这个默认值。这对于数据报告和用户界面显示特别有用,因为你可以避免显示NULL值,而是显示一个更有意义的默认值。
- 数据洗濯:在处理含有NULL值的数据时,COALESCE可以帮助你将这些NULL值转换为实际的数值或文本,便于分析和计算。
- 条件选择:COALESCE可以用于基于数据存在性(是否为NULL)条件性地选择值。
示例
假设你有一个Employees表,此中包含员工的salary列,你想要选择一个列,显示员工的薪水,假如薪水是NULL,则显示0。
- SELECT COALESCE(salary, 0) AS effective_salary FROM Employees;
复制代码 这个查询通过COALESCE函数确保了effective_salary列不会包含NULL值;假如salary是NULL,则effective_salary会显示为0。
小结
COALESCE函数提供了一种简单有效的方式来处理SQL查询中的NULL值,使得数据分析和展示更加机动和清楚。它是处理NULL值时应该思量的首选函数之一,特别是当你需要从一组大概的NULL值中选择第一个实际存在的值时。
leetcode例题:1378. 利用唯一标识码替换员工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 和他的唯一标识码(unique ID)。
复制代码 展示每位用户的 唯一标识码(unique ID );假如某位员工没有唯一标识码,利用 null 填充即可。
你可以以 恣意 顺序返回效果表。
返回效果的格式如下例所示。
示例 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 没有唯一标识码, 因此我们使用 null 替代。
- Meir 的唯一标识码是 2 。
- Winston 的唯一标识码是 3 。
- Jonathan 唯一标识码是 1 。
复制代码 解答
要办理这个问题,你可以利用 SQL 的 LEFT JOIN 语句来连接 Employees 表和 EmployeeUNI 表,并且利用 COALESCE 函数来处理那些没有匹配 unique_id 的情况,将它们填充为 NULL。LEFT JOIN 会返回左表 (Employees) 的全部行,假如左表的行在右表 (EmployeeUNI) 中没有匹配行,则效果中对应行的 EmployeeUNI 表列会包含 NULL 值。
以下是实现该逻辑的 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; -- 或者根据需要排序,比如按照 name 或 unique_id
复制代码 这个查询做了以下事变:
- FROM Employees E - 从 Employees 表开始,为表设置了一个别名 E 以简化后续引用。
- 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 函数返回其参数列表中的第一个非 NULL 值。在这里,假如 EU.unique_id 是 NULL(意味着 LEFT JOIN 没有找到匹配的行),则效果仍然是 NULL。虽然在这种情况下利用 COALESCE 函数大概看起来多余(因为 EU.unique_id 本身在没有匹配的情况下就是 NULL),但它在这里阐明白怎样处理大概的 NULL 值。实际上,你可以直接选择 EU.unique_id。
- ORDER BY E.id - 效果按照员工的 id 排序。这一步是可选的,取决于你想怎样展示效果。
注意,这个查询确保了纵然某些员工没有对应的 unique_id,他们的名字仍然会出现在查询效果中,unique_id 列用 NULL 表示他们缺少唯一标识码。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |