mysql distinct 的用法
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有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条件里?能,照样报错。。。。。。。
试了半天,也不行,最后在mysql手册里找到一个用法,用group_concat(distinct name)配合group by name实现了我所需要的功能,兴奋,天佑我也,赶快试试
报错。。。。。。。。。。。。郁闷。。。。。。。连mysql手册也跟我过不去,先给了我希望,然后又把我推向失望,好狠那。。。。
再仔细一查,group_concat函数是4.1支持,晕,我4.0的。没办法,升级,升完级一试,成功。。。。。。
终于搞定了,不过这样一来,又必须要求客户也升级了
突然灵机一闪,既然可以使用group_concat函数,那其它函数能行吗?
赶紧用count函数一试,成功,我。。。。。。。想哭啊,费了这么多工夫。。。。。。。。原来就这么简单。。。。。。
现在将完整语句放出:
select id,name, count(distinct name) from table group by name
结果:
id name count(distinct name)
1 a 1
2 b 1
3 c 1
最后一项是多余的,不用管就行了,目的达到。。。。。
哦,对,再顺便说一句,group by 必须放在 order by 和 limit之前,不然会报错,差不多了,我继续忙碌。。。。。。
原文
这篇文章是我从别人那里转来的,在自己的项目中也遇到了这样的问题,我的sql语句是向下面这样写的:
SELECT attention_join.memberID,nickName,headpic,attention_join.time
FROM attention_join
JOIN member ON attention_join.memberID = member.memberID
JOIN member_meta ON member.memberID = member_meta.memberID
GROUP BY attention_join.memberID
ORDER BY attention_join.time DESC
意思是 '按 加入/关注 小组的时间降序,查出小组内的会员' ,但是语句里并没有用到向上文说的count()关键字,这个也让我很不解,mysql没有详细的学习过,它的 group by 关键字的用法好像和 sqlserver 的有很大不同,这个等有时间了,在查查看吧,现在没有时间了
哦,对了,我的mysql版本是:
服务器版本: 5.1.54-1 ubuntu4
协议版本: 10
比上文提到的版本还要高,可能是功能升级了吧,哈哈。。。。。。
mysql distinct 的用法相关推荐
- php distinct 用法,distinct的用法
1. Distinct 位置 单独的distinct只能放在开头,否则报错,语法错误 例:SELECT Sid,DISTINCT(Sscore) score from t_student; [SQL ...
- mysql中的distinct的用法
distinct的作用 在mysql中,distinct关键字的主要作用就是对数据库表中一个或者多个字段重复的数据进行过滤,只返回其中的一条数据给用户,distinct只可以在select中使用 di ...
- [转载]MySQL exists的用法介绍
原文摘自:http://www.cnblogs.com/glory-jzx/archive/2012/07/19/2599215.html MySQL exists的用法介绍 有一个查询如下: 1 S ...
- mysql group concat 去重,MySQL group_concat() 函数用法
MySQL group_concat() 函数用法 在使用 group by对数据进行分组后,如果需要对 select 的数据项进行字符串拼接,这时就需要用到group_concat()函数. 1.基 ...
- MySQL——子查询用法
文章目录 MySQL--子查询用法 1.子查询概述 2.子查询的使用 2.1.单行子查询 2.2.多行子查询 2.3.相关子查询 子查询练习题 MySQL--子查询用法 1.子查询概述 子查询简介 子 ...
- sql去重复操作详解SQL中distinct的用法
在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值.关键词 distinct用于返回唯一不同的值. 表A: 表B: 1.作用于单列 select dist ...
- MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)
讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果 ...
- 【node】express中mysql的基本用法、连接池的使用、事务的回滚
[node]express中mysql的基本用法.连接池的使用 安装mysql包 mysql的配置信息 mysql基本操作 查询mysql并渲染数据 mysql插入操作 首先在html页面写上< ...
- Linux下Mysql的查询用法
Linux下Mysql的查询用法 一.Mysql的delete删除语法 1.删除数据库 2.删除数据库的表 二.查询数据 1.基本查询 2.条件查询 三.数据库插入数据 1.创建新表 2.插入数据 四 ...
最新文章
- TIOBE 9月编程语言排行榜
- c语言程序框一点数字就消失,你用C语言编程时,会犯下面的错误吗?
- 15行代码AC_ 【蓝桥杯】兴趣小组(解题报告+思考)
- 将DataFrame格式的数据存入到mysql数据库中
- ios学习笔记——UIImagePickerController
- 如何实现一个遵从设计原则的积分兑换系统2
- C++异常处理之terminate函数和set_terminate()函数
- BMFont 字体生成工具使用
- java voip 的sip服务器搭建_用树莓派搭建低成本VOIP服务器与电话系统
- Java 电阻计算器(一)
- 网站目标定位的关键词和选择质量高的关键词
- 【环境配置】octopus + dirt--ubuntu18.04
- tortoise清理本地分支_如何删除TortoiseHg中的意外分支?
- Logo就是商标吗?别再被扰乱视线了
- python朱庇特_新的朱庇特书
- 计算机一级考试全部内容讲解,全国计算机等级考试一级教程讲解.doc
- 强烈建议使用Windows Live Writer发布日志
- 三菱plc,x的n次方程序教程
- Labview-关于TDMS文件逻辑的学习-从今天开始学习Labview
- 异质图综述 - Graph Neural Networks for Graphs with Heterophily: A Survey(CoRR 2022)