mysql去重复关键字_mysql 去除重复 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条件里?能,还是报错。。。。。。。

试了半天,也弗成,最初正在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之前,否则会报错。。。。。。。。!OK了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值