SQL中的distinct关键词

至少SQL Server,HQL,Oracle都有效

通常SQL中对表中数据去重,会首先想到 distinct 关键字,

能实现的需求

1. distinct可以对单个字段去重
select distinct name from A


2. 对多个字段去重时,此时所列的字段需要同时满足才会起到去重效果,否则不会去重

select distinct name, id from A       --name和id同时重复才能去重,有一个不一样都不会去重

        --上面的写法是对name和id列都去重,而不是仅对name去重,id不去重

select distinct * from A      --*所代表的所有字段都重复时,才能去重

不能实现的需求

3. 不能实现指定字段去重,其他字段不去重的效果
select name, distinct id from A   --仅希望对id列进行去重,name列不去重,xxx这样是不行的,无法实现 ,而且会提示错误,因为distinct必须放在开头

问题:
如果想实现针对某一字段去重,其他字段是否重复不关心的效果怎么处理?
答:
可以采用row_number()的窗口函数
转换问题,可以转换为对重复的行取top1,这样使用over()函数,对指定列分组,排序,然后结合row_number()给每一组的数据一列序列,再对集合取序列为1的行

结合一些用例更容易懂一些。

posted @ 2019-10-11 20:16  公昭的blog  阅读(2095)  评论(0编辑  收藏  举报