MySQL 去重之distinct和group by以及结合count()的使用
在进行数据处理和分析时,经常需要对数据库中的数据进行去重操作。MySQL数据库提供了多种去重的方式,其中常用的有 DISTINCT
和 GROUP BY
,并且可以结合 COUNT()
函数使用。本文将详细介绍这两种去重方式的使用方法及其区别。
1. DISTINCT 去重
DISTINCT
关键字用于从结果集中删除重复的行。
使用方法
SELECT DISTINCT 列名 FROM 表名;
示例
假设有一个名为 students
的表,其中存储了学生的学号和姓名信息。我们需要获取所有学生的不重复的学号。
首先创建 students
表,并插入一些示例数据:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50)
);
INSERT INTO students (id, name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Alice'),
(4, 'Charlie'),
(5, 'Charlie');
然后执行以下查询语句来获取不重复的学号:
SELECT DISTINCT id FROM students;
运行结果如下:
id |
---|
1 |
2 |
3 |
4 |
5 |
2. GROUP BY 去重
GROUP BY
关键字用于将结果集按照指定的列进行分组,并对每个组进行聚合操作。
使用方法
SELECT 列1, 列2, ..., 聚合函数(列) FROM 表名 GROUP BY 列1, 列2, ...;
示例
继续以 students
表为例,如果我们需要统计每个姓名在表中出现的次数,可以使用 GROUP BY
来实现。
SELECT name, COUNT(*) AS count FROM students GROUP BY name;
运行结果如下:
name | count |
---|---|
Alice | 2 |
Bob | 1 |
Charlie | 2 |
通过 GROUP BY
,我们将学生的姓名分组,并使用 COUNT(*)
函数统计每个组中的记录数。可以看到,Alice 出现了两次,Bob 和 Charlie 分别出现了一次和两次。
3. DISTINCT vs GROUP BY
虽然 DISTINCT
和 GROUP BY
都可以用于去重,但它们在使用上有一些区别。
1) 使用场景不同
DISTINCT
:适用于简单的去重操作,只需要返回去重后的结果集。GROUP BY
:适用于需要根据某一列进行分组,并进行一些聚合操作(如 COUNT、SUM、AVG 等)的情况。
2) 查询结果不同
DISTINCT
:返回指定列的不重复值。GROUP BY
:返回按照指定列分组后的结果,包括分组依据的列和聚合函数计算的结果。
3) 执行效率不同
DISTINCT
:直接对结果集进行去重操作。GROUP BY
:先按照指定列进行排序,然后对排序后的结果进行分组和聚合。
由于 GROUP BY
需要对结果进行排序和分组操作,相比之下,DISTINCT
在处理简单的去重操作时一般会更高效。
4. DISTINCT 和 COUNT() 结合使用
除了单独使用 DISTINCT
或 GROUP BY
进行去重操作外,我们还可以将它们与 COUNT()
函数结合使用,来计算某一列的不重复值的个数。
使用方法
SELECT COUNT(DISTINCT 列名) FROM 表名;
示例
继续以 students
表为例,我们需要统计学生的不重复姓名的个数。
SELECT COUNT(DISTINCT name) FROM students;
运行结果为 3
,表示 students
表中共有 3
个不重复的学生姓名。
总结
本文详细介绍了 MySQL 中 DISTINCT
和 GROUP BY
两种去重操作的使用方法和区别,并展示了它们的示例和运行结果。其中,DISTINCT
适用于简单的去重操作,而 GROUP BY
适用于对结果进行分组和聚合操作的场景。此外,我们还可以结合 COUNT()
函数计算某一列的不重复值的个数。在实际应用中,根据具体的业务需求和数据情况选择合适的去重方式,以提高数据处理的效率和准确性。