`
wangking717
  • 浏览: 262518 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

mysql distinct 去重(转载)

 
阅读更多

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决,而 这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。所以我花了很多时间来研究这个问题,网上也查不到解决方案

下面先来看看例子:

     table

   id name

   1 a

   2 b

   3 c

   4 c

   5 b

库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。

比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。

select distinct name from table

得到的结果是:

   name

   a

   b

   c

好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:

select distinct name, id from table

结果会是:

   id name

   1 a

   2 b

   3 c

   4 c

   5 b

distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除。。。。。。。

我们再改改查询语句:

select id, distinct name from table

很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,照样报错。。。。。。。

很麻烦吧?确实,费尽心思都没能解决这个问题。

 

用count函数一试,成功,我。。。。。。。想哭啊,费了这么多工夫。。。。。。。。原来就这么简单。。。。。。

现在将完整语句放出:

select *, count(distinct name) from table group by name

结果:

   id name count(distinct name)

   1 a 1

   2 b 1

   3 c 1

最后一项是多余的,不用管就行了,目的达到。。。。。

唉,原来mysql这么笨,轻轻一下就把他骗过去了,郁闷也就我吧(对了,还有容容那家伙),现在拿出来希望大家不要被这问题折腾。

哦,对,再顺便说一句,group by 必须放在 order by 和 limit之前,不然会报错。。。。。。。。!OK了

如:SELECT DISTINCT FUserId,FShareCount,count(distinct FUserId) FROM t_talent_channel_share WHERE * Group by FUserId Order by FShareCount desc limit 10;

分享到:
评论

相关推荐

    Linux运维-运维课程d2-MySQL基本SQL语句(下)-14-DISTINCT去重操作.mp4

    Linux运维-运维课程d2-MySQL基本SQL语句(下)-14-DISTINCT去重操作.mp4

    mongodb中使用distinct去重的简单方法

    mongodb的distinct的语句: 代码如下: db.users.distinct(‘last_name’) 等同于 SQL 语句: 代码如下: select DISTINCT last_name from users 表示的是根据指定的字段返回不同的记录集。 一个简单的实例: //...

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

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

    mysql中去重 distinct用法

    总之,`DISTINCT`是MySQL中非常实用的功能,用于处理数据去重,但应谨慎使用,尤其是在大型数据集上,以避免性能问题。根据实际需求,结合`GROUP BY`和聚合函数,可以实现更复杂的去重和统计操作。

    Distinct自定义去重

    今天遇到一个数组再分组的情况,思路是先找到分组的原则,之后再遍历一次得到分组的数据。 就是把所有重复的数据去掉,(分组依据) 重写了IEqualityComparer接口,并实现了它,但是有一点当明没有搞明白。...

    C# 实现Distinct将对象按条件去重

    平时,我们将c#中的Distinct大多用于对数组去重,一般数组为基础的数据类型,例如 int,string.也可以用于对象去重,我们看看C#对Distinct方法的定义: 有重载,第一个参数都加了this,是拓展方法,有关拓展方法,请...

    mysql代码-distinct去重

    总结来说,`DISTINCT`是MySQL中处理数据去重的重要工具,广泛应用于数据查询和分析。理解它的用法和潜在性能影响,对于提升数据库操作的效率至关重要。通过实践和学习`main.mysql`中的示例,你可以更深入地掌握这一...

    mysql去重查询的三种方法

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

    分析MySQL中优化distinct的技巧

    在MySQL数据库中,优化`DISTINCT`操作是一个关键的性能提升策略,特别是在处理大量数据时。上述场景中,用户遇到了一个问题:对一个10G以上的单表`user_access_xx_xx`执行`SELECT COUNT(DISTINCT nick)`以统计唯一...

    MySQL中使用去重distinct方法的示例详解

    含义:distinct用来查询不重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段 用法注意: 1.distinct【查询字段】,必须放在要查询...

    将MySQL去重操作优化到极致的操作方法

    在MySQL数据库中,进行去重操作是常见的需求,特别是在处理大量数据时,高效地完成这一任务至关重要。本问题中,我们需要从源表`t_source`中提取出不重复的`created_time`和`item_name`组合,并将这50万条唯一的记录...

    MySQL DISTINCT 的基本实现原理详解

    例如,`SELECT DISTINCT user_id FROM group_message WHERE group_id = 2`,MySQL会扫描`idx_gid_uid_gc`索引,根据`group_id`的值过滤数据,然后利用索引的排序特性去重。Extra信息显示“Using WHERE; Using index...

    django queryset 去重 .distinct()说明

    我就废话不多说了,大家还是直接看代码吧! contacts = ... return house.distinct() 合并出来的queryset,再去重。 补充知识:Python——深入理解urllib、urllib2及requests(requests不建议使用?)

    【DISTINCT】优化之MySQL官方文档翻译

    ### DISTINCT优化之MySQL官方文档翻译解析 #### 一、引言 在数据库查询操作中,经常需要使用`DISTINCT`关键字来去除重复记录,确保结果集中的每一条记录都是唯一的。然而,在某些场景下,使用`DISTINCT`可能会导致...

    mysql去重的两种方法详解及实例代码

    总之,在MySQL中处理数据去重,我们可以根据实际需求灵活选择使用`DISTINCT`关键字配合`GROUP BY`,或者利用`GROUP BY`和子查询的组合。理解这两种方法并熟练运用,可以帮助我们在处理数据时更加高效。

Global site tag (gtag.js) - Google Analytics