去重与 NULL 处理
使用 DISTINCT 去重、IS NULL/IS NOT NULL、COALESCE
去重与 NULL 处理
重复数据和 NULL 是数据清洗的两大难题。DISTINCT 去重,IS NULL 判空。
学完本章你将: 掌握 DISTINCT、IS NULL、COALESCE。
DISTINCT —— 去重
sql
-- 查询有用户来自哪些城市(去重)
SELECT DISTINCT city FROM users;
-- 多列去重:组合唯一
SELECT DISTINCT city, age FROM users;
-- 只有当 city 和 age 都相同才算重复
-- 配合计数
SELECT COUNT(DISTINCT city) AS 城市数量 FROM users;
NULL 是什么
NULL 不是 0,不是空字符串,而是**"不知道/不存在"**。和 NULL 进行任何运算结果都是 NULL。
sql
-- NULL 不能直接比较!
SELECT * FROM users WHERE city = NULL; -- ❌ 永远查不到!
SELECT * FROM users WHERE city IS NULL; -- ✅ 正确
-- 非空
SELECT * FROM users WHERE city IS NOT NULL;
COALESCE —— 给 NULL 默认值
sql
-- 如果 city 是 NULL,显示"未知"
SELECT name, COALESCE(city, '未知') AS 城市 FROM users;
-- 多参数:取第一个不为 NULL 的值
SELECT COALESCE(NULL, NULL, '第三个值', '第四个') AS result;
-- 结果:'第三个值'
NULLIF —— 条件转 NULL
sql
-- 如果值是 0,返回 NULL;否则返回原值
SELECT name, NULLIF(age, 0) AS age FROM users;
-- 常用于避免除零错误
-- SELECT amount / NULLIF(count, 0) FROM stats;