sql中查重和去重

在这记录一个实习期间遇到的一个查重和去重的sql语句。

查重语句:(group by 查重)

SELECT user_id,
            count(*) as num

FROM 表名

WHERE 条件  GROUP BY user_id HAVING count(*)>1;

sql语句关键词为大写,基本思路就是以user_id字段来进行分组排序,count(*)函数是计数,这语句结果图如下

user_idnum
xiaoming2
xiaoyu3

上面所展示出来的都是有user_id重复的数据,user_id为xiaoming的字段有2条重复记录,xiaoyu存在3条重复,因为如果没有重复的话count(*)也就是表中的num值应该为1。

去重语句:(row_number over()去重)

select user_id,
 create_date,
 row_number() over(partition by user_id order by create_date desc) as date_n 
FROM 表名 
WHERE date_n=1                 

AND 条件;  

这里的去重就是利用了上述中的没有重复的count(*)为1,所以我们只需要取出1就可以了,但是问题在于,重复的字段中取出哪个去除哪个,还有就是把重复中要取出的count(*)值为1,这里我们要用到的就是排序函数,row_number() over(partition by order by)函数的具体可以自行百度,上诉实例中,总结就是按user_id分组,按create_date排序,desc这个是设置降序和升序的作用,通过row_number函数处理的大体效果:

user_idcreat_datedate_n
xiaoming2018-05-061
xiaoming2018-02-032
xiaoyu2018-06-011
xiaoyu2018-05-202
xiaoyu2018-05-103

这就是达到了我们想取到1的目的。主要就是我们要清楚要根据什么来排序,这个字段意义在于通过其可以判断在同一user_id中的不同点。我们只要在where 条件中限制date_n=1即可去重。

结果图如下:

user_idcreat_datedate_n
xiaoming2018-05-061
xiaoyu2018-06-011

  • 2
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学渣渣_宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值