sql-distinct-keyword
SQL DISTINCT:筛选唯一值
Section titled “SQL DISTINCT:筛选唯一值”SQL DISTINCT 关键字用于 SELECT 语句中,以从结果集中移除重复行,确保返回的每一行都是唯一的。
SELECT DISTINCT column1, column2, ...FROM table_name;DISTINCT 应用于单列
Section titled “DISTINCT 应用于单列”这是最常见的用例。它返回单列中所有唯一值的列表。
假设有一个 CUSTOMERS 表。我们想找出所有客户居住的唯一城市。
-- 假设 CUSTOMERS 表有以下记录:-- ID | NAME | CITY-- ---|---------|---------- 1 | John | London-- 2 | Jane | Paris-- 3 | Peter | London-- 4 | Mary | New York
-- 此查询将列出客户居住的所有城市SELECT CITY FROM CUSTOMERS;-- 结果:London, Paris, London, New York
-- 此查询将只列出唯一的城市SELECT DISTINCT CITY FROM CUSTOMERS;-- 结果:London, Paris, New YorkDISTINCT 应用于多列
Section titled “DISTINCT 应用于多列”当 DISTINCT 与多列一起使用时,它应用于这些列中值的组合。只有当所有选定列中的值与另一行完全相同时,才认为该行是重复的。
让我们从 ORDERS 表中找出 CITY 和 COUNTRY 的唯一组合。
-- 假设 ORDERS 表有:-- OrderID | City | Country-- --------|-----------|---------- 101 | London | UK-- 102 | London | USA -- (例如俄亥俄州的伦敦)-- 103 | Paris | France-- 104 | London | UK
SELECT DISTINCT City, CountryFROM ORDERS;
-- 结果:-- City | Country----------|---------- London | UK-- London | USA-- Paris | France请注意,(‘London’, ‘UK’) 在结果中只出现一次,即使它在原始表中出现了两次。(‘London’, ‘USA’) 被视为一个不同的、唯一的组合。
将 COUNT 与 DISTINCT 结合使用
Section titled “将 COUNT 与 DISTINCT 结合使用”一种非常强大的模式是在 COUNT() 聚合函数内部使用 DISTINCT 来计算列中唯一值的数量。
-- 计算我们的客户来自多少个不同的城市:SELECT COUNT(DISTINCT CITY) AS NumberOfUniqueCitiesFROM CUSTOMERS;根据我们的第一个示例,这将返回 3。
DISTINCT 和 NULL 值
Section titled “DISTINCT 和 NULL 值”当使用 DISTINCT 时,SQL 会将所有 NULL 值视为一个组。如果一个列包含多个 NULL 值,它们在结果集中将被合并为一行 NULL。
-- 假设 Products 表中有一些产品没有类别:-- ProductID | Category-- ----------|------------ 1 | Electronics-- 2 | Books-- 3 | NULL-- 4 | Books-- 5 | NULL
SELECT DISTINCT Category FROM Products;
-- 结果:-- Category-------------- Electronics-- Books-- NULLDISTINCT vs. GROUP BY
Section titled “DISTINCT vs. GROUP BY”SELECT DISTINCT column 在功能上等同于 SELECT column FROM table GROUP BY column。两者都返回该列的唯一值。
- 当你只是想获取唯一值的列表时,使用
DISTINCT。 - 当你想要对唯一值组执行聚合函数(如
COUNT、SUM、AVG)时,使用GROUP BY。GROUP BY更灵活、更强大。
为了查找唯一值,数据库通常需要对结果集执行排序或哈希操作,这在非常大的表上可能会导致较高的计算开销。如果你选择的列上存在索引,数据库可能会更高效地利用索引来检索唯一值。