关于select中DISTINCT的技巧和使用

2023-10-29

偶然在一个论坛看到了一个关于DISTINCT的技巧和用法.是一个版主写的.觉得可能会对一些人有帮助.所以转载而来.方便大家

以下是转载内容
单表的唯一查询用:distinct多表的唯一查询用:group by在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重复记录的所有值。其原因是distinct只能返回它的目标字段,而无法返回其它字段,用distinct不能解决的话,我只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。

下面先来看看例子:

表的结构如下:

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条件里?试试,照样报错。

试了半天其他能想到的方法也不行,最后在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之前,不然会报错。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于select中DISTINCT的技巧和使用 的相关文章

随机推荐

  • python画桃心表白

    python用turtle画简单图案比较方便 大一学python的turtle模块时 记得要画各种图案 如国旗 桃心等等图案 期末课程设计时有可能还会遇到画54张扑克牌 当初室友就被迫选了这道题 下面是程序 import turtle im
  • 基于FREERTOS系统的LWIP协议移植(STM32F1战舰版)

    文章目录 参考文献 前言 源码链接 FREERTOS系统介绍 FREERTOS系统之API函数 1 创建任务函数xTaskCreate 2 删除任务函数xTaskDelete 3 创建二值信号量函数xSemaphoreCreateBinar
  • 找不到BufferedImage这个Class的解决方法

    找不到BufferedImage这个Class的解决方法 环境 1 RedHat AS5 64位 2 WebSphere6 0 32位版本 正文 发现原来在RedHat AS4 32位系统上跑的程序不能在64位RedHat AS5中运行 系
  • 你还在 Docker 中跑 MySQL?恭喜你,好下岗了!

    上一篇 一个90后员工猝死的全过程 0 2T架构师学习资料干货分享 来源 toutiao com i6675622107390411276 容器的定义 容器是为了解决 在切换运行环境时 如何保证软件能够正常运行 这一问题 目前 容器和 Do
  • PyTorch 入坑七:模块与nn.Module学习

    PyTorch 入坑七 模型创建概述 PyTorch中的模块 torch模块 torch Tensor模块 torch sparse模块 torch cuda模块 torch nn模块 torch nn Parameter torch nn
  • 电脑开机不启动原因

    现象 长时间不关机 息屏后无法唤醒 电源指示灯亮 但是是黑屏 拔电重开 还是黑屏 显示器提示进入节电模 首先怀疑是内存条松了 或者接触不良 本人机器这边解决步骤如下 1 拔插内存条 开机试试 2 内存条换位置 开机试试 3 先取下一条内存条
  • conda install 和 pip install的区别

    目录 前言 一 范围不同 二 使用条件不同 三 对虚拟环境的管理能力不同 四 可使用包的数量不同 前言 conda和pip一般被认为是几乎相同的 但这两个工具虽然功能存在部分重叠 但其设计的目的是不同的 一 范围不同 Anaconda是一个
  • PCA、聚类、LFDA 和 MDS 相关绘图 iris (R语言)

    本文档使用 ggplot2 和解释了 PCA 聚类 LFDA 和 MDS 相关绘图 ggfortify 绘制 PCA 主成分分析 ggfortify 让我们 ggplot2 知道如何解释 PCA 对象 加载后 ggfortify 您可以gg
  • SpringBoot2的异常处理、Aop(事务)、拦截器

    目录 一 异常处理 一 ControllerAdvice ExceptionHandler 注解处理异常 二 自定义 HandlerExceptionResolver 类处理异常 二 事务Aop的相关使用 主要说明事务的使用方式 一 事务的
  • 项目安全问题-SM4加解密

    本篇建议与下方链接文章一起观看 http t csdn cn tjmeS 项目安全问题一直被人们研究 当前端路径上通过 status这种拼接参数时 参数的值在浏览器路径栏上非常醒目 是很容易被人恶意修改的 比如该用户并没有编辑权限 但有心之
  • 启动tomcat 服务报 The file is absent or does not have execute permission

    原因 部分文件没有可以执行的权限 1 在linu上部署好tomcat后 准备启动时报错 Cannot find bin catalina sh The file is absent or does not have execute perm
  • Linux自动化运维工具ansible详解

    文章目录 认识ansible ansible的组成 ansible的相关文件 ansible的使用 ansible的常用模块 1 copy模块 2 fetch模块 3 command模块 4 shell 模块 5 file模块 6 cron
  • 域用户访问samba共享提示“指定的网络密码不正确”

    samba默认工作组为WORKGROUP 导致windows无法访问 提示 指定的网络密码不正确 为了解决这个问题 只需要删除注册表中的一项就可以了 win r 输入regedit 回车 找到HKEY LOCAL MACHINE SYSTE
  • 单片机基础

    今天 我给大家更新一个新的模块 单片机 单片机是一个将运算单元 ALU 控制单元 寄存器组 存储器 ROM RAM I O接口 系统总线 定时 计数器集成一起 是一种集成电路芯片 在一块集成电路芯片上 集成了CPU ROM RAM I O接
  • 扯一扯HTTPS单向认证、双向认证、抓包原理、反抓包策略

    HTTP HyperText Transfer Protocol 超文本传输协议 被用于在Web浏览器和网站服务器之间传递信息 在TCP IP中处于应用层 这里提一下TCP IP的分层共分为四层 应用层 传输层 网络层 数据链路层 分层的目
  • 染色法判定二分图 — DFS深搜 +BFS宽搜

    染色法判定二分图 DFS深搜 题目描述 给定一个 n n n 个点 m m m 条边的无向图 图中可能存在重边和自环 请你判断这个图是否是二分图 输入格式 第一行包含两个整数
  • linux删除文件夹下所有文件

    看到了一遍文章 便突发奇想的想起Linux中删除目录下的所有文件的方法 整理了几个 如有不足 还望读者不吝赐教 删除当前目录下的文件 1 rm f 最经典的方法 删除当前目录下的所有类型的文件 2 find type f delete或fi
  • 为什么运放输入端串联一个隔直电容后输出没有波形?------关于隔直电路的简要理解

    文章目录 前言 一 常见的错误隔直电路 二 正确的隔直电路 前言 在看实验室学弟做电路的时候 他们单片机输出的正弦波要经过一个用NE5532做的跟随器 这里单片机产生的正弦波自带1 8V的直流偏置 测试发现 这里的偏置会严重影响NE5532
  • Micropython应用篇一--下载文件到F407VE Black开发板及开发板启动Flash选取

    Micropython应用篇一 下载文件到F407VE Black开发板及开发板启动选取 各位客官老爷们 咱又见面了 本来准备直接上例程来着 但由于怕各位老爷们对STM32的熟悉程度不一致 所以来一篇关于程序烧录及开发板启动 25Q128
  • 关于select中DISTINCT的技巧和使用

    偶然在一个论坛看到了一个关于DISTINCT的技巧和用法 是一个版主写的 觉得可能会对一些人有帮助 所以转载而来 方便大家 以下是转载内容 单表的唯一查询用 distinct多表的唯一查询用 group by在使用mysql时 有时需要查询