0
点赞
收藏
分享

微信扫一扫

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


  • 博客主页:长风清留扬
  • 每天更新大数据相关方面的技术,分享自己的实战工作经验和学习总结,尽量帮助大家解决更多问题和学习更多新知识,欢迎评论区分享自己的看法
  • 感谢大家点赞👍收藏⭐评论

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

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

DISTINCT 关键字

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

基本用法

SELECT DISTINCT column1, column2, ...  
FROM table_name;

  • column1, column2, …:这些是你要从表中检索的列。
  • 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');

对city列进行去重,单列去重

SELECT DISTINCT city FROM users;

输出结果:

city

New York

Los Angeles

Chicago

描述

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

对name和city列去重,多列去重

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中进行去重聚合

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,说明每个城市都只有两个不同的用户。

注意事项

  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的行为。

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


举报

相关推荐

0 条评论