首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >别再浪费时间了!用 MySQL DISTINCT 轻松消灭所有重复数据的秘诀

别再浪费时间了!用 MySQL DISTINCT 轻松消灭所有重复数据的秘诀

作者头像
小白的大数据之旅
发布2024-11-20 18:54:02
发布2024-11-20 18:54:02
63700
代码可运行
举报
运行总次数:0
代码可运行

DISTINCT 关键字

DISTINCT 是 MySQL 中用于从查询结果中去除重复记录的关键字。当需要获取唯一值或组合时,可以在 SELECT 语句中使用DISTINCT。它可以应用于单列或多列,并可与聚合函数(如 COUNT)结合使用,以统计唯一值的数量。

基本用法

代码语言:javascript
代码运行次数:0
运行
复制
SELECT DISTINCT column1, column2, ...  
FROM table_name;
  • column1, column2, …:这些是你要从表中检索的列。
  • table_name:这是你要从中查询数据的表的名称。

示例

创建表语法
代码语言:javascript
代码运行次数:0
运行
复制
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100),
    age INT,
    city VARCHAR(50)
);
模拟数据
代码语言:javascript
代码运行次数:0
运行
复制
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');
对city列进行去重,单列去重
代码语言:javascript
代码运行次数:0
运行
复制
SELECT DISTINCT city FROM users;
输出结果:

city

New York

Los Angeles

Chicago

描述

此查询返回唯一的城市名。DISTINCT 关键字消除了重复的城市名,使得每个城市只出现一次。数据库在处理时只保留不同的值。

对name和city列去重,多列去重
代码语言:javascript
代码运行次数:0
运行
复制
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 的记录)会被过滤掉。

放到count中进行去重聚合
代码语言:javascript
代码运行次数:0
运行
复制
SELECT COUNT(DISTINCT city) AS unique_cities FROM users;
输出结果

unique_cities

3

描述

此查询统计不同城市的数量。使用 COUNT(DISTINCT city) 只计算唯一的城市,排除重复的记录,因此返回的结果为3,代表有三个不同的城市。

使用表达式时对表达式的结果去重
代码语言:javascript
代码运行次数:0
运行
复制
SELECT DISTINCT age + 5 AS adjusted_age FROM users;
输出结果:

adjusted_age

35

30

27

22

40

描述

此查询返回调整后的年龄值。DISTINCT 在这里作用于计算后的结果,只有不同的 adjusted_age 值才会被返回。相同的表达式计算结果(如 22 + 5)只会出现一次。

分组后聚合统计去重
代码语言:javascript
代码运行次数:0
运行
复制
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,说明每个城市都只有两个不同的用户。

注意事项

  1. 性能影响: 使用DISTINCT可能会对查询性能产生负面影响,因为它需要数据库引擎对结果集进行额外的处理,以去除重复的行。在大数据集上,这种性能影响可能尤为明显。
  2. 作用于所有列: DISTINCT关键字作用于查询结果的所有列。如果你只想要某一列的唯一值,但仍然在SELECT语句中列出了其他列,那么这些列的值也会被考虑在内,以确定行的唯一性。
  3. 与聚合函数结合使用: 虽然DISTINCT通常用于去除重复行,但它也可以与某些聚合函数(如COUNT)结合使用,以计算唯一值的数量。例如,COUNT(DISTINCT column_name)会返回指定列中不同值的数量。
  4. 排序和分组: 在使用DISTINCT时,你可能还需要对结果进行排序或分组。这可以通过ORDER BY和GROUP BY子句来实现。但是,请注意,GROUP BY通常与聚合函数一起使用,而DISTINCT则用于去除重复行。在某些情况下,你可能需要决定是使用DISTINCT还是GROUP BY,或者是否可以将它们结合使用。
  5. NULL值处理: 在MySQL中,DISTINCT将NULL视为一个值。因此,如果表中有多行包含NULL值,并且这些行在其他列上的值也相同,那么这些NULL值将被视为重复,并且只会在结果集中出现一次。
  6. 索引使用: 如果查询中使用了DISTINCT,并且相关的列上有索引,那么数据库引擎可能会尝试利用这些索引来优化查询性能。然而,索引的使用还取决于查询的具体情况和数据库引擎的优化策略。
  7. 数据类型: DISTINCT关键字的行为可能受到列数据类型的影响。例如,对于字符串类型的列,比较是基于字符的,而对于数值类型的列,比较则是基于数值的。因此,在编写查询时,请确保了解列的数据类型以及它们如何影响DISTINCT的行为。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DISTINCT 关键字
    • 基本用法
    • 示例
      • 创建表语法
      • 模拟数据
      • 对city列进行去重,单列去重
      • 对name和city列去重,多列去重
      • 放到count中进行去重聚合
      • 使用表达式时对表达式的结果去重
      • 分组后聚合统计去重
    • 注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档