`
endual
  • 浏览: 3503338 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

mysql 中使用distinct的用法(转)

 
阅读更多

 
查看文章
   
mysql的distinct
2011-07-22 17:03

MySql中distinct的用法

2010-12-24 12:11:37|  分类:mysql|  标签: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条件里?能,照样报错。。。。。。。 

很麻烦吧?确实,费尽心思都没能解决这个问题。没办法,继续找人问。 

拉住公司里一JAVA程序员,他给我演示了oracle里使用distinct之后,也没找到mysql里的解决方案,最后下班之前他建议我试试group by。 

试了半天,也不行,最后在mysql手册里找到一个用法,用group_concat(distinct name)配合group by name实现了我所需要的功能,兴奋,天佑我也,赶快试试。 

报错。。。。。。。。。。。。郁闷。。。。。。。连mysql手册也跟我过不去,先给了我希望,然后又把我推向失望,好狠哪。。。。 

再仔细一查,group_concat函数是4.1支持,晕,我4.0的。没办法,升级,升完级一试,成功。。。。。。 

终于搞定了,不过这样一来,又必须要求客户也升级了。 

突然灵机一闪,既然可以使用group_concat函数,那其它函数能行吗? 

赶紧用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之前,不然会报错,差不多了,我继续忙碌。。。。。。 
分享到:
评论

相关推荐

    mysql中distinct用法【SQL中distinct的用法】.docx

    mysql中distinct用法【SQL中distinct的用法】.docx

    mysql中去重 distinct用法

    在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条件(count(distinct id)),其原因是distinct...

    MySQL中distinct和count(*)的使用方法比较

    首先对于MySQL的DISTINCT的关键字的一些用法: 1.在count 不重复的记录的时候能用到,比如SELECT COUNT( DISTINCT id ) FROM tablename;就是计算talbebname表中id不同的记录有多少条。 2,在需要返回记录不同...

    MySQL中索引优化distinct语句及distinct的多字段操作

    主要介绍了MySQL中索引优化distinct语句及distinct的多字段操作方法,distinct语句去重功能的使用是MySQL入门学习中的基础知识,需要的朋友可以参考下

    小度写范文【SQL中distinct的用法】mysql中distinct用法模板.pdf

    。。。

    小度写范文【SQL中distinct的用法】mysql中distinct用法模板.docx

    。。。

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

    2.只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 中使用; 3.DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,即查出的参数拼接每行记录都是唯一的 4.不能与all同时使用,默认情况下,查询时返回的...

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

    主要介绍了MySQL中Distinct和Group By语句的基本使用教程,这里主要是针对查询结果去重的用法,需要的朋友可以参考下

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

    主要介绍了MySQL中distinct与group by的一些比较及用法讲解,二者在查询操作中的用法有很多相似之处,需要的朋友可以参考下

    MySQL关键字Distinct的详细介绍

    MySQL关键字Distinct用法介绍 DDL Prepare SQL: create table test(id bigint not null primary key auto_increment, name varchar(10) not null, phone varchar(10) not null, email varchar(30) not null)...

    MySQL 5.1中文手冊

    5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1....

    MySQL去重该使用distinct还是group by?

    查看MySQL中是否设置了查询缓存。为了不影响测试结果,需要关闭查询缓存。 show variables like '%query_cache%'; 查看是否开启查询缓存决定于query_cache_type和query_cache_size。 方法一:关闭查询缓存需要...

    MySql 5.1 参考手册.chm

    5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1....

    MySQL 5.1官方简体中文参考手册

    5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1....

    MySQL 5.1参考手册

    5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 ...

    mysql5.1中文手册

    在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中...

    MYSQL中文手册

    5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的...

    MySQL中distinct语句去查询重复记录及相关的性能讨论

    在 MySQL 查询中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦。用法也很简单: SELECT DISTINCT * FROM tableName ...

Global site tag (gtag.js) - Google Analytics