html去重三种方法,sql语句_ 的三种去重方法

本文将介绍用 distict、group by 和 row_number() over 。html

注:这里的去重是指:查询的时候, 不显示重复,并非删除表中的重复项,关系删除表中重复数据的sql 请参考一下连接:sql

https://www.cnblogs.com/171207xiaohutu/p/11520763.html数据库

1. distinct函数

表userinfo 数据以下:spa

id

name

age

height

10

xiaogang

23

181

11

xiaoli

31

176

12

xiaohei

22

152

13

xiaogang

26

172

14

xiaoming

31

176

如今须要当前用户表不重复的用户名

select distinct name from userinfo

如结果(1):

name

xiaogang

xiaohei

xiaoli

xiaoming

但是我如今又想获得Id的值,改动以下code

select distinct name,id from userinfohtm

如结果(2)blog

xiaogang 10

xiaoli 11

xiaohei 12

xiaogang 13

xiaoming 14排序

此时distinct同时做用了两个字段,即必须得id与name都相同的才会被排除it

2. group by

select name

from userinfo

groub by name

运行上面3行sql的结果如上面distinct中的结果(1)

select  name,id

from userinfo

groub by name ,id

运行上面3行sql的结果如上面distinct的结果(2)

3. row_number() over

SQL Server 经过Row_Number 函数给数据库表的记录进行标号,在使用的时候后面会跟over 子句,而over 子句主要用来对表中的记录进行分组和排序的。

语法以下:

ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2)

1:Partition BY 用来分组

2:Order by 用来排序

接下来用 row_number() over 进行去重。首先用name 进行分组,id进行排序。

具体SQL 语句以下

SELECT * FROM (

select *,ROW_NUMBER() over(partition by name order by id desc) AS rn from userinfo ) AS u WHERE u.rn=1

结果以下

id  name   age height rn

13 xiaogang 26 172 1

12 xiaohei 22 152 1

11 xiaoli 31 176 1

14 xiaoming 31 176 1

经过使用 row_number over 子句就能将全部的列展现出来,同时进行去重。

4.思考

distinct 和group by 的区别:

(1)distinct经常使用来查询不重复记录的条数:count(distinct name),group by 经常使用它来返回不重记录的全部值。

(2)在使用group by 分组后,在select中能够选择分组字段,和非分组字段的函数值,如 max()、min()、sum、count()等

distinct 和row_number over()区别:

(1)distinct 和 row_number over 均可以实现去重功能,而distinct 做用于当行的时候,其"去重" 是去掉表中字段全部重复的数据,做用于多行的时候是,其"去重"全部字段都相同的数据。

(2)在使用row_number over 子句时候是先分组,而后进行排序,再取出每组的第一条记录"去重"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值