`
endual
  • 浏览: 3544464 次
  • 性别: 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的技巧

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

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

    MySQL 中 DISTINCT 用法详解 MySQL 中的 DISTINCT 关键字用于返回唯一不同的值,避免重复值的出现。当我们在查询表中数据时,可能会遇到重复值的情况,这时使用 DISTINCT 关键字可以帮助我们返回唯一的值。 ...

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

    在MySQL中,`DISTINCT`的使用方式非常灵活,可以从单个列到多个列进行操作,也可以与聚合函数如`COUNT()`结合使用。以下是关于`DISTINCT`在SQL中的具体用法和一些注意事项。 1. **单列去重** 当我们只对单一列应用...

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

    在MySQL中,`DISTINCT`的使用方式和功能与其他SQL数据库系统(如SQL Server、Access等)大体相同,但有一些细微的差别。以下是对`DISTINCT`用法的详细解释: 1. **单列去重**: 当我们需要从一个表中获取唯一的某...

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

    在数据库查询操作中,经常需要使用`DISTINCT`关键字来去除重复记录,确保结果集中的每一条记录都是唯一的。然而,在某些场景下,使用`DISTINCT`可能会导致性能问题,尤其是在与`ORDER BY`或`LIMIT`结合使用时。为了...

    用Distinct在MySQL中查询多条不重复记录值,绝对的物有所值

    今天,我们将深入探讨如何使用`DISTINCT`关键字在MySQL中查询多条不重复记录值,这不仅是一种实用技能,也是提升数据处理效率的关键所在。 ### `DISTINCT`关键字详解 `DISTINCT`关键字在SQL查询中扮演着一个至关...

    mysql中去重 distinct用法

    当你想要从查询结果中去除重复的特定字段时,可以在`SELECT`语句中使用`DISTINCT`关键字。例如,如果我们有一个`user`表,包含`id`和`name`字段,要获取所有不重复的用户名,可以使用以下语句: ```sql SELECT ...

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

    当`DISTINCT` 在多列查询中使用时,可能会出现歧义。如果想要分别统计每列的不重复值,可以考虑使用 `GROUP BY` 或 `GROUP_CONCAT` 函数。例如,如果想单独统计 `id` 和 `type` 的不重复值,可以使用 `GROUP BY`: ...

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

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

    vc 小技巧 mysql distinct 语句

    本文将深入探讨MySQL中的`DISTINCT`语句,以及如何在Visual C++(简称VC)开发环境中与MySQL数据库进行交互。 `DISTINCT`是SQL语言中的一个关键字,用于从查询结果中消除重复的行。当你执行一个`SELECT DISTINCT`...

    MySQL DISTINCT 的基本实现原理详解

    在某些情况下,MySQL可以使用松散索引扫描来执行DISTINCT操作。例如,当查询只包含DISTINCT关键字和一个被索引的列时,MySQL会遍历索引,对每个不同值形成一个组,然后返回每个组的第一个记录。在EXPLAIN计划中,`...

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

    本文将详细介绍这两个语句的使用方法。 首先,`DISTINCT`关键字是用来去除查询结果中重复记录的。当你需要确保返回的每个记录都是唯一的,例如在查询用户名时,可以使用`DISTINCT`。基本语法是`SELECT DISTINCT...

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

    - `DISTINCT` 不会进行聚合操作,它只是简单地找出并返回唯一的记录,所以它不支持在查询中使用聚合函数如`SUM`, `COUNT`, `AVG`, `MAX`, `MIN`等。 2. `GROUP BY` 关键字: - `GROUP BY` 用于将数据根据一个或多...

    使用distinct在mysql中查询多条不重复记录值的解决办法

    使用distinct在mysql中查询多条不重复记录值的解决办法 在 MySQL 中,使用 distinct 关键字可以过滤掉重复记录,只保留一条。但是,这个关键字只能返回它的目标字段,而无法返回其它字段。这使得在查询多条不重复...

    mysql复杂动态行转列解决方案

    在传统的SQL查询中,我们可以使用`CASE`语句配合`GROUP BY`来实现简单的行转列转换,但这种方法往往不适用于动态列,即列的数量和名称可能根据不同的数据而变化。在这种情况下,我们通常会依赖于`PIVOT`操作,但在...

    MySQL关键字Distinct的详细介绍

    MySQL中的`DISTINCT`关键字是用于消除查询结果中的重复行,从而返回唯一不同的值。它在数据查询中扮演着至关重要的角色,特别是在处理可能存在重复记录的数据表时。下面将详细介绍`DISTINCT`关键字的用法及其注意...

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

    另外一种情况是在聚合查询中使用`DISTINCT`,例如`SELECT COUNT(DISTINCT column) FROM tableName`,这将计算`column`字段中唯一值的数量。请注意,这种用法需要MySQL的版本支持,且在某些低版本的MySQL中可能无法...

Global site tag (gtag.js) - Google Analytics