科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道使用distinct如何能在得到目标字段不重复值的同时返回其他字段值?

使用distinct如何能在得到目标字段不重复值的同时返回其他字段值?

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

使用distinct如何能在得到目标字段不重复值的同时返回其他字段值?

作者:csdn 来源:csdn 2009年12月22日

关键字: ORACLE 问答

  • 评论
  • 分享微博
  • 分享邮件

使用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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章