Menu
CoddyTech

用 COALESCE 处理 NULL 值

本课属于 Coddy SQL 学习旅程的“进阶内容”单元。第 3 课,共 27 课。

COALESCE 会返回第一个不是 NULL 的参数:

COALESCE(nickname, first_name, 'Anonymous')

从左向右读取,并在遇到第一个非 null 值时停止。这是在查询中提供备用值最简洁的方式,无需使用 CASE。

常见用途:

  • 在 LEFT JOIN 中用 0 代替 NULL:COALESCE(SUM(amount), 0)
  • 选取第一个非空的可选字段:COALESCE(mobile, home, work)
challenge icon

挑战

简单

可用的表和列:

  • users: id、 display_name、 email
  • orders: user_id、 amount

每位用户返回一行,包含:

  • id
  • label:如果设置了 display_name,就使用它;否则使用 email;如果两者都没有,则使用 'unknown'
  • total_spent:该用户所有订单的 amount 总和;没有订单的用户应显示 0(而不是 NULL)

按 id 排序。提示:从 users 到 orders 使用 LEFT JOIN,再配合 COALESCE(SUM(...), 0),即可处理缺失的行。

亲手试试

SELECT u.id,
       -- 通过 COALESCE 得到 label
       -- 通过 COALESCE(SUM(...), 0) 得到 total_spent
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id
ORDER BY u.id
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

进阶内容中的所有课

自己练习: SQL 在线编辑器