- 博客主页:长风清留扬-CSDN博客
- 系列专栏:MySQL入门到入魔
- 每天更新大数据相关方面的技术,分享自己的实战工作经验和学习总结,尽量帮助大家解决更多问题和学习更多新知识,欢迎评论区分享自己的看法
- 感谢大家点赞👍收藏⭐评论
DISTINCT 关键字
DISTINCT 是 MySQL 中用于从查询结果中去除重复记录的关键字。当需要获取唯一值或组合时,可以在 SELECT 语句中使用DISTINCT。它可以应用于单列或多列,并可与聚合函数(如 COUNT)结合使用,以统计唯一值的数量。
基本用法
sql
SELECT DISTINCT column1, column2, ...
FROM table_name;
- column1, column2, ...:这些是你要从表中检索的列。
- table_name:这是你要从中查询数据的表的名称。
示例
创建表语法
sql
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100),
age INT,
city VARCHAR(50)
);
模拟数据
sql
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列进行去重,单列去重
sql
SELECT DISTINCT city FROM users;
输出结果:
city |
---|
New York |
Los Angeles |
Chicago |
描述
此查询返回唯一的城市名。DISTINCT 关键字消除了重复的城市名,使得每个城市只出现一次。数据库在处理时只保留不同的值。
对name和city列去重,多列去重
sql
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中进行去重聚合
sql
SELECT COUNT(DISTINCT city) AS unique_cities FROM users;
输出结果
unique_cities |
---|
3 |
描述
此查询统计不同城市的数量。使用 COUNT(DISTINCT city) 只计算唯一的城市,排除重复的记录,因此返回的结果为3,代表有三个不同的城市。
使用表达式时对表达式的结果去重
sql
SELECT DISTINCT age + 5 AS adjusted_age FROM users;
输出结果:
adjusted_age |
---|
35 |
30 |
27 |
22 |
40 |
描述
此查询返回调整后的年龄值。DISTINCT 在这里作用于计算后的结果,只有不同的 adjusted_age 值才会被返回。相同的表达式计算结果(如 22 + 5)只会出现一次。
分组后聚合统计去重
sql
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,说明每个城市都只有两个不同的用户。
注意事项
- 性能影响:
使用DISTINCT可能会对查询性能产生负面影响,因为它需要数据库引擎对结果集进行额外的处理,以去除重复的行。在大数据集上,这种性能影响可能尤为明显。 - 作用于所有列:
DISTINCT关键字作用于查询结果的所有列。如果你只想要某一列的唯一值,但仍然在SELECT语句中列出了其他列,那么这些列的值也会被考虑在内,以确定行的唯一性。 - 与聚合函数结合使用:
虽然DISTINCT通常用于去除重复行,但它也可以与某些聚合函数(如COUNT)结合使用,以计算唯一值的数量。例如,COUNT(DISTINCT column_name)会返回指定列中不同值的数量。 - 排序和分组:
在使用DISTINCT时,你可能还需要对结果进行排序或分组。这可以通过ORDER BY和GROUP BY子句来实现。但是,请注意,GROUP BY通常与聚合函数一起使用,而DISTINCT则用于去除重复行。在某些情况下,你可能需要决定是使用DISTINCT还是GROUP BY,或者是否可以将它们结合使用。 - NULL值处理:
在MySQL中,DISTINCT将NULL视为一个值。因此,如果表中有多行包含NULL值,并且这些行在其他列上的值也相同,那么这些NULL值将被视为重复,并且只会在结果集中出现一次。 - 索引使用:
如果查询中使用了DISTINCT,并且相关的列上有索引,那么数据库引擎可能会尝试利用这些索引来优化查询性能。然而,索引的使用还取决于查询的具体情况和数据库引擎的优化策略。 - 数据类型:
DISTINCT关键字的行为可能受到列数据类型的影响。例如,对于字符串类型的列,比较是基于字符的,而对于数值类型的列,比较则是基于数值的。因此,在编写查询时,请确保了解列的数据类型以及它们如何影响DISTINCT的行为。
推荐阅读
Python基础
Python全网最全基础课程笔记(三)------所有运算符+运算符优先级
Python全网最全基础课程笔记(四)------基本数据类型
Python全网最全基础课程笔记(五)------选择结构+Python新特性Match
Python全网最全基础课程笔记(七)------列表,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
Python全网最全基础课程笔记(八)------字典,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
Python全网最全基础课程笔记(九)------集合,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
Python全网最全基础课程笔记(十)------元组,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
Python全网最全基础课程笔记(十一)------字符串所有操作,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
Python全网最全基础课程笔记(十二)------函数,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
Python全网最全基础课程笔记(十三)------作用域,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
Python全网最全基础课程笔记(十四)------异常处理机制,跟着思维导图和图文来学习,爆肝2w字,无数代码案例!
有史以来最全的异常类讲解没有之一!爆肝3万字,终于把Python的异常类写完了!最全Python异常类合集和案例演示,第一部分
有史以来最全的异常类讲解没有之一!第二部分爆肝2万字,终于把Python的异常类写完了!最全Python异常类合集和案例演示,第二部分
有史以来最全的异常类讲解没有之一!第三部分爆肝4万字,终于把Python的异常类写完了!最全Python异常类合集和案例演示,第三部分
Python疑难杂症百科-BUG编年史
浮点数精度不再是困扰:Python高手的精准编程秘籍!解决Python浮点数精度问题!
还在为Python变量中遇到的BUG而发愁吗?,变量相关的问题和解决办法看这篇文章就够了!
还在为Python"运算符"中遇到的BUG而发愁吗?,变量相关的问题和解决办法看这篇文章就够了!
Python刷题面试宝典
Python "元组" ------Python面试100道实战题目练习,巩固知识、检查技术、成功就业
Python "字符串操作" ------Python面试100道实战题目练习,巩固知识、检查技术、成功就业
Python "集合" 100道实战题目练习,巩固知识、检查技术
Python "函数" ------Python面试100道实战题目练习,巩固知识、检查技术、成功就业
Python "异常处理机制" ------Python面试100道实战题目练习,巩固知识、检查技术、成功就业
Flink入门到就业
2024年最新Flink教程,从基础到就业,大家一起学习--基础篇
2024年最新Flink教程,从基础到就业,大家一起学习--入门篇
2024年最新Flink教程,从基础到就业,大家一起学习--Flink集群部署
2024年最新Flink教程,从基础到就业,大家一起学习--flink部署和集群部署(从本地测试到公司生产环境如何部署项目源码)