DISTINCT 从结果中移除重复行,只返回唯一值。它用于获取列(或列的组合)的不同值 — 常见于查找唯一条目或构建下拉列表。
DISTINCT — 唯一值
-- get the unique countries (no duplicates)
SELECT country users;
country, city users;
DISTINCT 从结果中移除重复行,只返回唯一值。它用于获取列(或列的组合)的不同值 — 常见于查找唯一条目或构建下拉列表。
-- get the unique countries (no duplicates)
SELECT country users;
country, city users;
DISTINCT 应用于所有选定的列 — DISTINCT country, city 返回唯一的组合,而不是分别返回唯一的国家和唯一的城市。
-- count how many UNIQUE countries there are
SELECT COUNT(DISTINCT country) FROM users;
-- vs COUNT(*) which counts all rows (with duplicates)
SELECT COUNT(*) FROM users;
COUNT(DISTINCT column) 计算唯一值 — 对于"有多少个不同的 X?"很有用。
-- find values that appear MORE THAN ONCE (duplicates)
SELECT email, COUNT(*) AS count
FROM users
GROUP BY email
HAVING COUNT(*) > 1; -- groups with more than one row = duplicates
要查找重复项(而不仅仅是删除它们),使用 GROUP BY + HAVING COUNT(*) > 1 — 这可以识别哪些值是重复的以及重复次数。
-- these are often equivalent for getting unique values:
SELECT DISTINCT country FROM users;
SELECT country FROM users GROUP BY country;
-- GROUP BY is more flexible (can add aggregates); DISTINCT is simpler for pure deduplication
DISTINCT requires the database to compare/sort rows to find uniques → can be costly
on large datasets. Often a sign you might restructure the query (e.g. a JOIN producing
duplicates that DISTINCT then removes — consider whether the JOIN is the issue).
DISTINCT 是一个有用的、常见的 SQL 功能,用于处理重复数据 — 获取唯一值是一个频繁的需求(下拉列表的唯一类别、不同的条目、计算唯一项目),因此理解它是实用的日常知识。
了解 DISTINCT 的工作原理(删除重复行,以及在多列上它返回唯一组合 — 一个常见的误解点)以及如何使用 COUNT(DISTINCT) 计算唯一值涵盖了典型用途。
同样有价值的是知道如何查找实际的重复项(使用 GROUP BY + HAVING COUNT(*) > 1)— 这是数据清理和验证中一个常见、重要的任务(识别重复的电子邮件、记录等)。
理解 DISTINCT 和 GROUP BY 之间的关系(在去重时通常等效,GROUP BY 更灵活)以及性能说明(DISTINCT 需要比较/排序,可能代价很高,有时表明 JOIN 产生了不需要的重复)也很有用。
由于处理重复数据 — 既删除它们(DISTINCT)也查找它们(GROUP BY/HAVING)— 是查询和数据质量工作中的常见实际需求,并且由于理解 DISTINCT 的行为(特别是在多列上)及其替代方案可以防止混淆和低效,知道如何使用 DISTINCT 处理重复数据是处理实际数据(通常包含或需要唯一值)时经常应用的有用知识。