mysql中select distinct的用法 - 铭记此刻

sxshiblog 2021-08-16 原文


mysql中select distinct的用法

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但 往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只能返回它的目标字段,而无法返回其它字段,经过实验, 有如下方法可以实现。

举例如下:
这是test表的结构
id test1 test2
1 a 1
2 a 2
3 a 3
4 a 1
5 b 1
6 b 2
7 b 3
8 b 2
比如我想用一条语句查询得到test1不重复的所有数据,那就必须使用distinct去掉多余的重复记录。
select distinct test1 from test
得到的结果是:
test1
a
b
好像达到效果了,可是,我想要得到的是id值?改一下查询语句吧:
select distinct test1, id from test

test1 id
a 1
a 2
a 3
a 4
b 5
b 6
b 7
b 8
distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与test1都相同的才会被排除,这不可能的,id是自动增长的。。。

我们再改改查询语句:

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

通过查阅手册,可以通过group_cancat来实现:
SELECT id, group_concat( DISTINCT test1 ) FROM test GROUP BY test1
id group_concat( distinct test1 )
1 a
5 b
不过它只有在4.1.0以后才能用,对于那些老版本的数据库是不行的。

可以通过其他函数来实现:
select *, count(distinct test1) from test group by test1
id test1 test2 count( distinct test1 )
1 a 1 1
5 b 1 1
最后一项是多余的,不用管就行了,目的达到。。。。。

还有更简单的方法也可以实现:
select id, test1 from test group by test1
id test1
1 a
5 b

发表于
2015-04-02 18:20 
铭记此刻 
阅读(1182
评论(0
编辑 
收藏 
举报

 

版权声明:本文为sxshiblog原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/sxshiblog/p/4387894.html

mysql中select distinct的用法 - 铭记此刻的更多相关文章

  1. video设置视频的宽高 – 婧星

    video设置视频的宽高 一般情况下<video loop=”loop” sty […]...

  2. Firefox — 火狐浏览器下载

    http://www.firefox.com.cn/download/    ...

  3. 电脑和手机连接同一个无线,电脑不能上网,手机能上网? – 叶是风的眼泪

    电脑和手机连接同一个无线,电脑不能上网,手机能上网?   今天晚上在用电脑连接家里的WIFI时,发现不能上网了 […]...

  4. 全景视频拼接关键技术 – pengfengting~

    全景视频拼接关键技术 2015-11-24 15:09  pengfengting~  阅读(808)  评论 […]...

  5. 方便实用的六款解压缩软件 – cjyang1

    方便实用的六款解压缩软件 对于我们这种资料特别多,随时都需要跟工作伙伴沟通传递资料的人来说,一款方便的压缩软件 […]...

  6. 产品思维 – 产品管理系列文章 – Austin Liu\’s Fashion

      在2015年,由于工作关系,笔者进入了一家投资公司,做起了产品经理。今天,笔者就将产品经理的思维做一个总结 […]...

  7. weex组件和vue组件区别 – 无忧&勾勾

    weex组件和vue组件区别 Posted on 2018-07-04 14:54  无忧&勾勾  阅 […]...

  8. 将文件解除占用 – jia仁jia义

    将文件解除占用 一、有提示是哪个程序占用:   显示哪个程序占用,就将哪个程序在任务管理器中关闭 二、没有显示 […]...

随机推荐

  1. 在阿里云ECS服务器发送QQ邮件 – 枫&vce

    在阿里云ECS服务器发送QQ邮件 我们知道阿里云ECS服务器默认禁用25端口。所以我们可以使用465端口(邮件 […]...

  2. Golang 解决 Iris 被墙的依赖包 – 小人物大梦想

    Golang 解决 Iris 被墙的依赖包 使用 Golang 的 Iris web 框架时,用 go get […]...

  3. JavaWeb

    JavaWebJavaWeb概述B/S架构B/S 架构:Browser/Server,浏览器/服务器架构模式,它的特点是:客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web资源,服务器把We...

  4. Wepy–小程序自定义底部tabBar

    Wepy–小程序自定义底部tabBar 因为需求,小程序自带的tabBar不能满足, 所以只能来自 […]...

  5. (十 一)从零开始学人工智能–强化学习: 强化学习入门基础

    强化学习入门基础 目录 强化学习入门基础 1. 强化学习基础知识 1.1 强化学习发展历程 1.2 强化学习特 […]...

  6. 香港城大:首创3D打印磁控微型机器人技术推动人体送药研究发展

      香港城市大学研究团队全球首创由磁力推动、3D打印的微型机器人技术,能于生物体内精确地运载细胞到指定位置,预 […]...

  7. 计算机中的流水线技术到底是个啥?

    写在前面 流水线技术是计算机中的一种相当重要的技术。简单的说,流水线技术的出现使得计算机能够支持并行计算,能够 […]...

  8. 05_配置交换机SSH服务(数通华为) – 芦苇の

    05_配置交换机SSH服务(数通华为) 1. 网络拓扑:    2. SW1配置:2.1 配置为Access口 […]...

展开目录

目录导航