`
alert_mm
  • 浏览: 168507 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

mySql ----- select 中的DISTINCT用法

阅读更多

select 中的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的执行计划显示,原始SQL语句`SELECT COUNT(DISTINCT nick) FROM user_access`使用了`ind_user_access`索引进行全扫描,这意味着数据库需要遍历整个索引来获取不重复的`nick`值。这显然是低效的,因为即使使用...

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

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

    mysql-centos安装

    SELECT DISTINCT CONCAT('User:\'', user, '\'@\', host, '\'') AS query FROM mysql.user; ``` #### 六、总结 本文详细介绍了如何在CentOS 6及CentOS 7环境下手动安装MySQL的过程,包括清理旧版MySQL、添加依赖...

    MySQL--视图的定义

    2. 使用了DISTINCT关键字。 3. 使用了GROUP BY子句。 4. 包含HAVING子句。 5. 使用UNION或UNION ALL合并多个查询结果。 #### 视图的作用 - **简化操作**:视图可以将复杂的查询封装起来,简化用户的操作。 - **...

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

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

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

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

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

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

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

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

    vc 小技巧 mysql distinct 语句

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

    MySQL DISTINCT 的基本实现原理详解

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

    mysql-数据库-实验三.pdf

    使用`SELECT course_id, COUNT(DISTINCT student_id) FROM enrollment GROUP BY course_id`。 8. **查询计算机系(CS)的学生姓名、年龄、系别**: `SELECT student_name, age, department FROM students WHERE ...

    MySQL 5.1参考手册

    7.2.8. MySQL如何优化DISTINCT 7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. ...

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

    本文将详细探讨这两种方法的使用方法及其差异。 首先,`DISTINCT` 关键字用于从查询结果中去除重复的记录。在实际应用中,`DISTINCT` 主要有以下几种用法: 1. 计算不重复记录数量:`SELECT COUNT(DISTINCT id) ...

    mysql代码-distinct去重

    本教程将深入探讨`DISTINCT`的使用方法,以及它在实际数据库操作中的应用。 首先,让我们了解`DISTINCT`的基本语法。当你在SQL查询中使用`DISTINCT`时,它会与`SELECT`语句一起使用,用来筛选出不同的值。基本语法...

    有关mysql命令及用法

    ### MySQL 命令及用法详解 #### 一、登录 MySQL 数据库 登录 MySQL 数据库是进行数据库管理和数据操作的基础。以下是一些常见的登录方式: 1. **连接本地 MySQL 数据库**: - 默认端口为 `3306`。 - 命令格式:...

    mysql中去重 distinct用法

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

Global site tag (gtag.js) - Google Analytics