distinct多列 oracle_oracle 多列distinct - CSDN
精华内容
参与话题
  • oracle distinct 多列

    千次阅读 2013-11-21 18:56:39
    distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用 它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说...
    distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用 它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。
    下面先来看看例子:
    table表
    字段1 字段2 id name 1 a 2 b 3 c 4 c 5 b
    库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。
    比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。
    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怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除。。。。。。。
    我们再改改查询语句:

    select id, distinct name from table
    很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,照样报错。
    ------------------------------------------------------------------------------------------------------------

    下面方法也不可行:
    select *, count(distinct name) from table group by name
    结果:

    ORA-00979: not a GROUP BY expression
    00979. 00000 - "not a GROUP BY expression"

    依然报错,

    group by 必须放在 order by 和 limit之前,不然会报错

    ------------------------------------------------------------------------------------------------------------

    偶认为这样可行
    select max(id), name from table group by name;

    结果:
    id name
    1 a
    2 b
    4 c
    5 d

    参考资料:
    http://www.cnblogs.com/dogxuefeng/archive/2012/06/21/2557700.html
    http://stevenfeng.iteye.com/blog/841793
    http://eric-yan.iteye.com/blog/1749440
    展开全文
  • oracle统计数量count和distinct组合使用

    千次阅读 2015-07-21 15:12:28
    先去除重复的,然后使用count计算数量 select count(distinct(t.)) from 表 t

    先去除重复的,然后使用count计算数量


    select count(distinct(t.列)) from 表 t 

    展开全文
  • oracledistinct多个字段

    万次阅读 2010-10-18 09:35:00
    select DISTINCT(t.f_resume_id||t.f_resume_status),t.f_resume_status,t.f_resume_status,t.f_recruit_channel, t.f_small_channel_id from wintalent3.T_CORP_LOG_...80012) distinct多个字段,当然相同的功能也可

    select DISTINCT(t.f_resume_id||t.f_resume_status),t.f_resume_status,t.f_resume_status,t.f_recruit_channel,
           t.f_small_channel_id
                     from css.T_RESUME_INFO t  where t.f_resume_status in (80011,80012)

     

    distinct多个字段,当然相同的功能也可用group by 完成
    select a,b,c,min(d) d
    from A
    group by a,b,c

    通过使用 group就可以出去相同的返回结果。就不需要使用distinct了。
    二者效率,最好需要哪个的时候用哪个,group by是用来分组统计的,能用disitnct的地方就不要用group by 了。
    网友摘录:
         用group   by   和rownum嵌套,但distinct   效率高

    展开全文
  • Oracle去重函数distinct

    千次阅读 2019-11-27 10:40:24
    distinct用于返回唯一不同的值。 表table1: id value 1 a 1 a 2 b 3 b 4 c 5 c 表table2: username password tom s123456 toms 123456 表table3: ...

    distinct用于返回唯一不同的值。

    表table1:

    id value
    1 a
    1 a
    2 b
    3 b
    4 c
    5 c

    表table2:

    username password
    tom s123456
    toms 123456

     

    表table3:

    username phone
    tom 10086
    jack 10010

    作用于单列

    select distinct value from table1

    执行结果如下:

    value
    a
    b
    c

     

    作用于多列

    例1:

    select distinct id, name from table1

    执行结果如下:

    id value
    1 a
    2 b
    3 b
    4 c
    5 c

    通过这个例子可以看出,多列去重是根据写在distinct后面的各个字段来去重的(当这几个字段所有的列的值都相同时才会被认为是重复数据)。

    例2:

    select distinct username, password from table2

    执行结果如下:

    username password
    tom s123456
    toms 123456

    执行结果为两行,这说明distinct是分别作用了username和password列,而不是把这两列的值“拼接”后再去重的。

     

    多表查询

    select distinct o.username from table2 o , table3 t  where  o.username = t.username ;

    执行结果如下:

    username
    tom

     

    此外还需要注意一下几点:

    1.distinct必须放在开头,如果不放在开头会报错

    select id, distinct value from table1;   --会提示错误

    2.多表查询时,如果表中有相同字段名,需指定是那张表的字段

    select distinct username from table2 o , table3 t  where  o.username = t.username    --会提示错误

    3.COUNT统计单字段

    select count(distinct value) from table1;  --表中value去重后的数目

    4.COUNT统计多字段

    count是不能统计多个字段的,可以使用嵌套查询解决:

    select count(*) from (select distinct username, password from table2) as t2;

     如果这样查询:select count(distinct value, id) from table1;会报错

    5.显示字段

    显示的字段只能是distinct指定的字段

    展开全文
  • Oracle三种去重的方法 distinct group by rowid 分组函数:作用于一组数据,并对一组数据返回一个值 常见的分组函数有: count 返回找到的记录数 min 返回一个数字或计算的最小值 max 返回一个数字或计算...
  • oracle数据库使用distinct多个字段

    万次阅读 2014-01-24 13:13:53
    select DISTINCT(t.f_resume_id||t.f_resume_status),t.f_resume_status,t.f_resume_status,t.f_recruit_channel,  t.f_small_channel_id   from css.T_RESUME_INFO t where t.f_resume_st
  • oracle distinct多字段去重

    千次阅读 2016-02-19 10:59:00
    --select * from ti_vw_boss结果: transactionid dn dn_type productid src_spid opt_type opt_time state 100000000000011213 15855057001 0 PI
  • oracle 数据库 去重查询

    万次阅读 2017-05-23 15:03:50
    数据库字段去重 方法介绍:distinct 关键字、group by 、row_number() over()
  • distinct 多列详解

    万次阅读 2020-09-25 18:40:31
    2.distinct多列select distinct a,b,c from tableA;注意此时是将a,b,c三列所有不同的组合全部列出来,而不仅仅只是distinct a 相当于以下语句: select a,b,c from tableA group by a,b,c3.另外一
  • oracle 中select distinct 和order by 的问题

    千次阅读 2015-01-17 23:02:46
    执行SQL:  select distinct name from tableName order by id ...在 ordere by 中指定,结果将先按照子句中的第一排序,然后第二个,依此类推。 在 select 中未出现的列名也可用于 ordere by
  • oracle 去重查询

    万次阅读 2018-11-23 10:26:33
    --------------------  原作者:搬长城的红砖  原文:...  oracle 数据库字段去重 方法介绍:distinct 关键字、group by 、row_number ()over(partition by order by desc) 我的需...
  • Oracledistinct的用法实例 摘要: 此外,distinct 会对返回的结果集进行排序 所以会大大影响查询效率,大数据集时比较明显 。所以,最好和order by 结合使用,可以提高效率 。 select distinct a,b,c from t...
  • 我SQL语句是这样的 sum(distinct case when e.ifxydw='1' and a.delstate ='0' then b.money else null end) as Xysr, 也碰到了跟上面一样的问题,b.money只要数据相同他就把我的给去掉了,这样我改怎么解决?...
  • 事例在Oracle数据库中执行SQL:  select distinct name from tableName order by id 原本想过滤name字段重复值,并按照id进行排序,但是SQL报错,无法执行。 原因:SELECT语句中含有DISTINCT关键字或者有...
  • --去重查询方法一:根据id select * from sxe where id in(select min(id) from sxe group by username) order by id asc; --去重查询方法二:根据rownum select * from (select s.*,rownum rn from sxe s ) x ...
  • oracle中SELECT DISTINCT 的非常规用法

    千次阅读 2017-02-09 17:03:53
    这并不成问题,不过,有时您也许希望仅仅出不同(distinct)的值。关键词 DISTINCT 用于返回唯一不同的值。”-------来自w3cschool。 比如我遇到的问题:表内有字段名为“类型”,表内有很条记录,我想查找...
  • 关于oracle select distinct order by的问题

    千次阅读 2012-08-03 16:22:20
    转载自 ... oracle 中select distinct 和order by 的问题 - [Oracle] 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://kxfzly.blogbus.com/logs/3266543
  • oracledistinct用法

    千次阅读 2016-03-30 15:54:14
    2、作用于多列 select distinct name, id from A select distinct xing, ming from B 返回的结果为两行,这说明distinct并非是对xing和ming两列“字符串拼接”后再去重的,而是分别作用于了xing和ming列。 3、...
  • oracle 中select distinct 和order by 同时使用的问题 Oracle 11g数据库,执行下面语句出现错误“ORA-01791: 不是 SELECTed 表达式”: select distinct name from Share_URL_Seeds order by id  原来...
  • 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...
1 2 3 4 5 ... 20
收藏数 37,342
精华内容 14,936
关键字:

distinct多列 oracle