`
MauerSu
  • 浏览: 514389 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

去重是distinct还是group by?

    博客分类:
  • SQL
 
阅读更多
源:https://blog.csdn.net/ljl890705/article/details/70602442
评:
distinct简单来说就是用来去重的,而group by的设计目的则是用来聚合统计的,两者在能够实现的功能上有些相同之处,但应该仔细区分,因为用错场景的话,效率相差可以倍计。

单纯的去重操作使用distinct,速度是快于group by的。

distinct
distinct支持单列、多列的去重方式。
单列去重的方式简明易懂,即相同值只保留1个。
多列的去重则是根据指定的去重的列信息来进行,即只有所有指定的列信息都相同,才会被认为是重复的信息。

干巴巴的说不好理解,示例一下:

示例数据表中的数据:
mysql> select * from talk_test;
+----+-------+--------+
| id | name  | mobile |
+----+-------+--------+
|  1 | xiao9 | 555555 |
|  2 | xiao6 | 666666 |
|  3 | xiao9 | 888888 |
|  4 | xiao9 | 555555 |
|  5 | xiao6 | 777777 |
+----+-------+--------+

进行单列去重后的结果:
mysql> select distinct(name) from talk_test;
+-------+
| name  |
+-------+
| xiao9 |
| xiao6 |
+-------+
2 rows in set (0.01 sec)

mysql> select distinct(mobile) from talk_test;
+--------+
| mobile |
+--------+
| 555555 |
| 666666 |
| 888888 |
| 777777 |
+--------+
**只会保留指定的列的信息

进行多列去重后的结果:
mysql> select distinct name,mobile from talk_test;
+-------+--------+
| name  | mobile |
+-------+--------+
| xiao9 | 555555 |
| xiao6 | 666666 |
| xiao9 | 888888 |
| xiao6 | 777777 |
+-------+--------+
**只有所有指定的列信息都相同,才会被认定为重复的信息

group by使用的频率相对较高,但正如其功能一样,它的目的是用来进行聚合统计的,虽然也可能实现去重的功能,但这并不是它的长项。
分享到:
评论

相关推荐

    Mysql中distinct与group by的去重方面的区别

    在MySQL数据库中,`DISTINCT` 和 `GROUP BY` 是两个非常重要的SQL关键字,它们都可以用来处理数据的去重问题,但在实际应用中,两者的使用场景和效果有所差异。 首先,`DISTINCT` 关键字的主要作用是去除查询结果中...

    使用Distinct查询.rar

    `DISTINCT`通常与`GROUP BY`和聚合函数(如`COUNT`, `SUM`, `AVG`, `MIN`, `MAX`)一起使用,用于计算每个分组的唯一值。例如,计算每个部门的员工数量: ```sql SELECT DISTINCT department, COUNT(*) AS employee...

    MySQL中distinct与group by语句的一些比较及用法讲解

    在MySQL数据库中,`DISTINCT` 和 `GROUP BY` 是两种用于数据去重和分组统计的SQL语句,它们虽然都可以帮助我们处理重复数据,但有着不同的应用场景和执行机制。 1. `DISTINCT` 关键字: - `DISTINCT` 主要用于去除...

    SQL去重 清除冗余数据

    对于查询结果去重,可以使用distinct关键字标注需要去重的字段,也可以使用group by + 关键字。 使用distinct关键字可以取得不重复的值,例如:Select distinct name from Lin_test将会取得name列的不重复的值。...

    mysql中去重 distinct用法

    在`GROUP BY`和`DISTINCT`中选择时,`GROUP BY`可能在某些情况下提供更好的性能,因为它可以直接利用索引来优化。 7. **注意事项**: - `DISTINCT`不会考虑字段的顺序,只要字段值相同,无论顺序如何,都被视为...

    MySQL中distinct与group by之间的性能进行比较

    在MySQL数据库中,`DISTINCT` 和 `GROUP BY` 是两个用于数据去重的语句,但它们在功能和性能上有显著的区别。这次的测试主要比较了这两种方法在不同条件下的执行效率,尤其是在数据量较大的情况下。 首先,`...

    MySQL中Distinct和Group By语句的基本使用教程

    在MySQL数据库中,`DISTINCT`和`GROUP BY`是两个非常重要的查询语句,它们在处理数据去重和分组方面发挥着关键作用。本文将详细介绍这两个语句的使用方法。 首先,`DISTINCT`关键字是用来去除查询结果中重复记录的...

    oracle中使用group by优化distinct

    2. **使用`GROUP BY ROLLUP/CUBE/GROUPING SETS`**:这些高级`GROUP BY`技术可以组合不同的分组,以实现类似于`DISTINCT`的效果。例如,如果所有字段都需去重,可以使用`GROUP BY`加上所有字段,然后利用`ROLLUP`或`...

    识破laravel+groupBy+count中那些隐藏着的秘密

    本文将深入探讨这个问题,以及如何正确地在 Laravel 中使用 `groupBy` 和 `count` 来实现去重统计。 在描述中提到的错误查询语句是: ```php Model::whereIn('course_id', $course_ids)->groupBy('uid')->count(); ...

    mysql去重查询的三种方法

    本文将详细介绍三种在MySQL中实现去重查询的方法:使用DISTINCT、GROUP BY以及使用开窗函数ROW_NUMBER()或其类比方法。 ### 一、使用DISTINCT DISTINCT关键字是SQL中最常见的去重方式,它会返回所有不同的记录。...

    几种sql去重

    另一种常见的去重方式是使用 `GROUP BY` 结合 `HAVING` 子句。这种方式可以用来找出具有相同字段的记录,然后根据这些字段进行分组并过滤。例如: ```sql SELECT hospital_name, hospital_address FROM gz_hospital ...

    MySQL中distinct语句的基本原理及其与group by的比较

    在MySQL数据库中,`DISTINCT`和`GROUP BY`都是用于数据去重和分组的SQL语句,但它们有着不同的应用场景和优化策略。本文将深入探讨`DISTINCT`语句的基本原理,并与`GROUP BY`进行比较。 首先,`DISTINCT`关键字用于...

    oracle字段去重

    当需要去除包含多个字段的记录中的重复项时,可以使用`GROUP BY`结合聚合函数如`COUNT()`等。 **示例:** 假设有一个员工表`EMPLOYEE`,包含`EMP_ID`, `DEPT_ID`, `NAME`等字段,现在需要去除基于`DEPT_ID`的重复...

    distinct 多列问题结合group by的解决方法

    这种组合使用`DISTINCT`、`GROUP BY`以及子查询的方法可以有效地处理多列去重的问题,尤其是在需要保留特定列的其他信息(如`id`)时。请注意,这种方法的性能可能受到数据量和索引的影响,因此在大数据集上可能需要...

Global site tag (gtag.js) - Google Analytics