用 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)
挑战
简单可用的表和列:
users:id、display_name、orders:user_id、amount
每位用户返回一行,包含:
idlabel:如果设置了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
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
进阶内容中的所有课
自己练习: SQL 在线编辑器