DISTINCT 是 MySQL 中用于从查询结果中去除重复记录的关键字。当需要获取唯一值或组合时,可以在 SELECT 语句中使用DISTINCT。它可以应用于单列或多列,并可与聚合函数(如 COUNT)结合使用,以统计唯一值的数量。
SELECT DISTINCT column1, column2, ...
FROM table_name;
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100),
age INT,
city VARCHAR(50)
);
INSERT INTO users (name, email, age, city) VALUES
('Alice', 'alice@example.com', 30, 'New York'),
('Bob', 'bob@example.com', 25, 'Los Angeles'),
('Alice', 'alice@example.com', 30, 'New York'),
('Charlie', 'charlie@example.com', 35, 'New York'),
('Diana', 'diana@example.com', 28, 'Los Angeles'),
('Eve', 'eve@example.com', 22, 'Chicago'),
('Frank', 'frank@example.com', 22, 'Chicago');
SELECT DISTINCT city FROM users;
city |
---|
New York |
Los Angeles |
Chicago |
此查询返回唯一的城市名。DISTINCT 关键字消除了重复的城市名,使得每个城市只出现一次。数据库在处理时只保留不同的值。
SELECT DISTINCT name, city FROM users;
name | city |
---|---|
Alice | New York |
Bob | Los Angeles |
Charlie | New York |
Diana | Los Angeles |
Eve | Chicago |
Frank | Chicago |
此查询返回唯一的名称和城市组合。DISTINCT 在这里作用于多个列,只有当 name 和 city 的组合不同的时候,记录才会被保留。相同的 name 和 city 组合(如 Alice 的记录)会被过滤掉。
SELECT COUNT(DISTINCT city) AS unique_cities FROM users;
unique_cities |
---|
3 |
此查询统计不同城市的数量。使用 COUNT(DISTINCT city) 只计算唯一的城市,排除重复的记录,因此返回的结果为3,代表有三个不同的城市。
SELECT DISTINCT age + 5 AS adjusted_age FROM users;
adjusted_age |
---|
35 |
30 |
27 |
22 |
40 |
此查询返回调整后的年龄值。DISTINCT 在这里作用于计算后的结果,只有不同的 adjusted_age 值才会被返回。相同的表达式计算结果(如 22 + 5)只会出现一次。
SELECT city, COUNT(DISTINCT name) AS unique_users FROM users GROUP BY city;
city | unique_users |
---|---|
New York | 2 |
Los Angeles | 2 |
Chicago | 2 |
此查询返回每个城市的唯一用户数量。COUNT(DISTINCT name) 确保只计算不同的用户名称,避免同一用户在同一城市多次计入。每个城市的用户数量为2,说明每个城市都只有两个不同的用户。