distinct去重
将查询的出来的数据每一条都进行比较,只有完全相同在去重,效率低,速度慢,并且不能对text类型使用
语法:select distinct 字段1,字段2,字段3 from 表;
可以用在函数里面:
语法:select count(distinct 字段1,字段2,字段3) from 表
一、用group by作为条件去重
例表studenty:
Id
Name
Age
Score
Grade
张三
12
68
初三
李四
13
60
初二
李四
13
59
初二
王五
15
78
高一
要求:去除name为李四相同的数据
用distinct去重(失败):
Select distinct * from studenty;
结果:
Id
Name
Age
Score
Grade
张三
12
68
初三
李四
13
60
初二
李四
13
59
初二
王五
15
78
高一
未去重成功,id是不一样的
用group by去重(成功):
根据指定的条件分组后只保存每组对应的一个id号
select max(id) from studenty group by name,age
如何根据id查询结果
Select * from studenty where id in (select max(id) from studenty group by name,age)
结果:
Id
Name
Age
Score
Grade
张三
12
68
初三
李四
13
59
初二
王五
15
78
高一
去重成功
二、用ROW_NUMBER() OVER()排序函数去重(用法2)
语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)
解释:此函数是根据指定的字段进行分组,然后又根据另一个字段进行排序,得到一个排序的序号
例表studenty:
Id
name
age
Score
李大
26
89
李二
21
65
李三
16
42
李二
21
61
用法1:可以用于分组排序
要求:根据name分组后按照score进行排序,需全部显现出来
Select *,row_number()over(partition by name order by score) as 排序 from studenty;
结果:
Id
name
age
Score
排序
李大
26
89
李二
21
61
李二
21
65
李三
16
42
用法2:去重
要求:只保留每个name的一条数据
Select * from (select *,row_number()over(partition by name order by score) as排序from studenty) t where t.排序<=1;
如果想保留两条数据则为where t.排序<3;以此类推
结果:
Id
name
age
Score
排序
李大
26
89
李二
21
61
李三
16
42
本站所有软件信息均由用户上传发布,版权归原著所有。如有侵权/违规内容,敬请来信告知邮箱:764327034@qq.com,我们将及时撤销! 转载请注明出处:https://www.ssyg068.com/zhishik/270.html
发表回复
评论列表(0条)