`
hpjianhua
  • 浏览: 241608 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

Oracle数据库下 distinct 与row_number() over的用法

阅读更多
一.先介绍下Oracle去重关键字distinct的用法:

1.distinct对单表去重是比较简单的,如:

select distinct r.user_id r.name from ap_user_role r;


这个是对单个用户只出一条记录的用法。 



2.对多个表的联合查询去重使用distinct方法,请看下面的方法,判断是否有问题?

(1).案例一:

 select distinct r.user_id ,r.name , u.id,u.sex from ap_user_role r, ap_user u where

 u.id=r.user_id;


用法正确吗?

(2).案例二:

 select distinct t.user_id from (
 
 select r.user_id,r.name, u.id,u.sex from ap_user_role r, ap_user u
 
 where u.id=r.user_id
 
 ) t


这两种用法那种正确呢?

二.再来介绍下Oracle函数ROW_NUMBER() OVER的用法:

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

简单的说row_number()从一开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER()

OVER (ORDER BY create_time DESC) 是先把create_time列降序,再为降序以后的每条

create_time记录返回一个序号。

如何使用呢?请看以下案例:

select t.* from (

select u.id, u.name, r.user_id,r.name, row_number() over(partition by u.id order 

by u.create_time desc) as num 

from ap_user u, ap_user_role r where u.id=r.user_id

) t where t.num=1;


请试一下这几种用法,查看下结果是如何的呢?


0
1
分享到:
评论
2 楼 hpjianhua 2012-11-21  
houxinyou 写道
怎么没有答案呢?

答案是:案例一达不到预期的效果,错误; 案例二正确
1 楼 houxinyou 2012-11-21  
怎么没有答案呢?

相关推荐

    oracle常用分析函数与聚合函数的用法

    row_number() over (order by to_number(score) desc) "row_number" from lcy; ``` 接下来,我们讨论Oracle的聚合函数。这些函数用于汇总数据,对一组值执行计算并返回单个结果。常见的聚合函数包括: 1. **AVG...

    oracle字段去重

    Oracle数据库提供了多种方法来实现字段级别的去重。 #### 二、去重需求分析 根据提供的描述“oracle字段去重 以某一个字段去重”,可以理解为在某个表中基于特定字段进行去重处理。这里的关键在于如何有效地针对...

    oracle常用的数据库脚本

    SELECT column1, column2, ROW_NUMBER() OVER (PARTITION BY column1 ORDER BY column2 DESC) as rn FROM table_name ) SELECT column1, column2 FROM dup_data WHERE rn = 1; ``` 以上方法各有其适用场景,...

    oracle中distinct的用法详解

    在Oracle数据库中,`DISTINCT` 是一个非常重要的SQL关键字,用于从查询结果中去除重复的行。在本文中,我们将深入探讨`DISTINCT`的用法及其在不同情况下的应用。 首先,让我们看一个简单的例子。假设我们有一个名为...

    数据库使用技巧

    在Oracle中,我们通常使用`DISTINCT`关键字来消除查询结果中的重复行,但这并不能直接修改数据库表结构。若要从表中删除重复数据,可以采取以下方法: 1. **使用GROUP BY和HAVING子句**:这种方法适用于需要保留一...

    【Oracle】LISTAGG函数的使用.pdf

    1. 作为分析函数,类似于 row_number()、rank()、dense_rank() 等函数,使用方法相似: LISTAGG(合并字段, 连接符) WITHIN GROUP(ORDER BY 合并字段的排序) OVER(PARTITION BY 分组字段) 2. 作为聚合函数,类似于 ...

    oracle中如何删除重复的记录

    ##### 方法一:使用子查询与DELETE语句 这种方法适用于只需要删除重复记录中的某些行的情况。步骤如下: 1. **找出重复的记录**:首先,我们需要找到那些重复的记录。可以通过子查询来实现这一点。 ```sql ...

    SQL去重 清除冗余数据

    使用Delete from Lin_test nologging where id in (select id from (select /*+full(Lin_test ) parallel(Lin_test 5)*/ id,row_number() over(partition by id, name, order by id) rn from Lin_test ) where rn <>...

    oracle本表去重的语句优化

    在Oracle数据库中,进行表内数据去重是一项常见的任务,特别是在处理大量数据时。面对一个包含一亿条记录,且每个记录只有一个字段`mobile`的`bao_mobile_temp`表,如何高效地去除重复数据,是本文要探讨的核心问题...

    oracle行转列较精典的解决方案

    在Oracle数据库管理与开发过程中,经常会遇到需要将数据表中的行数据转换为列数据的情况,这种操作被称为“行转列”或者“行列转换”。行列转换是数据分析、报表生成等场景中非常常见的需求之一。本文将详细介绍几种...

    Oracle 9i 分析函数参考手册

    可以与`DISTINCT`关键字结合使用以计算唯一值的数量。 3. MAX 和 MIN:分别找出一组中的最大值和最小值。 4. SUM:对一组数值进行求和。 5. RANK, DENSE_RANK, ROW_NUMBER:这三种函数用于排名,RANK() 在有相同...

    Oracle操作

    根据提供的文件信息,我们可以整理出一系列与Oracle数据库操作相关的知识点,包括备份与恢复、系统参数查询、表空间管理等重要方面。以下是对这些知识点的详细解释: ### 1. 随机选取表中的前10条记录 ```sql ...

    Oracle表中重复数据去重的方法实例详解

    此外,还可以使用其他分析函数,如`RANK()`或`DENSE_RANK()`,它们与`ROW_NUMBER()`类似,但处理相同值的方式略有不同。`RANK()`在遇到相等值时会跳过一些编号,而`DENSE_RANK()`则不会留下编号空缺。 总的来说,...

    sql数据库一些查找删除方法.docx

    ROW_NUMBER() OVER(PARTITION BY data_guid ORDER BY rowid) AS m FROM adam_entity_datas) WHERE m <> 1) ``` ### 方法四 针对用户代码(usercode)重复的查找: ```sql SELECT usercode, COUNT(*) FROM ...

    ORACLE转DB2对照全解

    **注意:** Oracle使用`rownum`来限制结果集,而DB2则使用`ROW_NUMBER()`函数来实现。 #### 十四、Returning into **Oracle:** ```sql UPDATE table SET col = new_val RETURNING col INTO v1 WHERE id = 1; ``` ...

    Oracle事例

    查看用户下所有的表 SQL>select * from user_tables; <7> alter user语句的quota子句限制用户的磁盘空间 如:alter user jf quota 10M on system; 27、查看放在ORACLE的内存区里的表 SQL>select table_name,...

    DBA对Oracle SQL编写规范的总结

    - **规范要求**:在处理大量数据时,使用临时表可以提高性能,尤其是在需要频繁访问相同数据集的情况下。 - **示例**: ```sql CREATE GLOBAL TEMPORARY TABLE tmp_employee ON COMMIT DELETE ROWS AS SELECT *...

    oracle经典sql多表查询,sql统计

    7. 分组统计函数:COUNT(DISTINCT),COUNT(*) OVER(),RANK(),DENSE_RANK(),ROW_NUMBER()等,用于在聚合查询中实现更复杂的统计。 以上只是Oracle SQL多表查询和统计功能的一部分,实际使用中还有更多的复杂查询...

Global site tag (gtag.js) - Google Analytics