扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
使用distinct如何能在得到目标字段不重复值的同时返回其他字段值?
发现oracle提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。也就是distinct只能返回它的目标字段,而无法返回其它字段。
比如说:
一张表:
ID NAME
---------- --------------------
1 a
2 b
3 c
4 c
5 b
-------------------------------
怎么用sql查询得到这么个结果:
ID NAME
---------- --------------------
1 a
2 b
3 c
--------------------------------
我试过的结果:
select distinct name from table
得到的结果是:
name
a
b
c
好像达到效果了,可是,没有想要的id值呢,改查询语句:
select distinct name, id from table
结果会是:
id name
1 a
2 b
3 c
4 c
5 b
distinct同时作用了两个字段。
到底怎么办?
with temp as(
select 1 id,'a' name from dual
union all
select 2 id,'b' name from dual
union all
select 3 id,'c' name from dual
union all
select 4 id,'c' name from dual
union all
select 5 id,'b' name from dual
)
select distinct min(id) id, name from temp group by name;
结果:
id name
1 a
2 b
3 c
id name n
1 aa 13
2 aa 9
3 bb 51
4 bb 12
要选出id,name,n
你如何聚合?
select name,min(id),min(n) from tb
结果是
aa 1,9
bb 3,12
这是聚合结果,不是原始数据行。
获得原始数据行解法,我那个链接里已经有了。
当然用row_number也会有很多写法。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者