mysql中去重函数_mysql之常用函数 海棠

去重

在项目开发中我们常常需要针对某个或多个字段进行去重,而distinct是mysql中去重最常用的方法,但是他也有自己的局限性。使用distinct时,去重字段必须放在distinct后面,但distinct后可以跟多个字段,表示通过多字段联合去重;distinct左边不能有字段,否则会报错。并且去重的结果只显示去重的字段,所以我们一般是用distinct来统计去重后的数量。如果即要去重又要显示我们想要的字段就需要用group by了,也可以使用group_concat.

distinct

根据某个字段去重

示例:SELECT DISTINCT product_code FROM `insf_athena_loan_info`

出现如下结果:

c41b1ad81ba605923ecd6a68f79e5242.png

统计去重后的数量

示例:SELECT COUNT(DISTINCT product_code) FROM `insf_athena_loan_info`

出现如下结果:

480b1e81a6f57b02ce5da34c9dea1ce1.png

去重后显示非去重字段

示例:SELECT loan_order_id, name,COUNT(DISTINCT product_code) FROM `insf_athena_loan_info`

出现如下结果:c958127fc73769ec8e10d6a2b581f42c.png

注意:此时你会发现并没有我们想要出现多行数据,而是显示一行,要是显示多行急需要用到group by了

group by

根据某字段去重

示例:SELECT  name FROM `insf_athena_loan_info` GROUP BY name

出现以下结果:

6214e4a11f5ee75fc8cec0cae7406e27.png

注意:我们再使用group by时结果集中我们可以显示任意我们想显示的字段,当然group by后面可以跟多个字段

根据某字段去重后统计计数

示例:SELECT  name,card_no,count(*) FROM `insf_athena_loan_info` GROUP BY name

出现结果:

fc819a87e983a17b2098dbe3fe2eb6d6.png

注意:很显然并没有出现我们想要的结果,没有出现去重后的数据条数,而是统计的是每条数据重复的次数

拼接函数

concat

这个函数比较简单就是将多个字段拼成一个字符串,但是拼接后的结果就是一个字符串,中间没有任何字符,如果我们想要不同字段只间用逗号隔开,那么我们就要逗号也拼进去,也就是说如果我们有N个字段要拼接,那么我们就要些N-1个',',很显然这是异常麻烦的,解决办法我们可以用concat_ws函数

concat_ws

concat_ws函数是concat特殊情况,主要作用是,我们在拼接将多个字段时,如果我们想要他们用逗号隔开,我们只需要指定一次就行了,不用在每两个字段之间都把','写一遍。

示例:select MAX(id),MIN(id),CONCAT_WS("&",id,name,card_no),count(*) FROM `insf_athena_loan_info` GROUP BY name

出现以下结果:

bf197363c9a027d07a58972f4c22e673.png

注意:大家可以看到concat_ws只是将一条数据的三个字段拼接到了一起,但是如果想将所有重复的字符都拼接到一起改怎么做呢,这个时候就用到group_concat函数了

group_concat

将多个字段拼接到一起

示例:SELECT   GROUP_CONCAT(id ,name ORDER BY id desc separator '_' ),card_no,count(*) FROM `insf_athena_loan_info` GROUP BY name

出现的结果:

cfcb94423bd478577d4ac122636c4403.png

注意:这里再拼字段的时候,就把所有重复数据的这二个字段都拼到了一起,并且我们按照id字段进行了排序,需要强调的是,如果把order  by id 放到name字段之前,id字段之后,会发现name字段不会被拼装。另外,我们也注意到那么和id字段之间没有任何链接符,如果我们需要再他们之间也加链接符的话,需要结合concat_ws来实现

改变后的sql如下:SELECT   GROUP_CONCAT(CONCAT_WS('&',id,name) ORDER BY id desc separator '_' ),card_no,count(*) FROM `insf_athena_loan_info` GROUP BY name

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值