首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Distinct vs row_number() -相同条件的查询在oracle中得到不同的结果?

在Oracle中,Distinct和row_number()是用于处理查询结果集的两种不同的方法。

Distinct是用于去除查询结果集中的重复行。当使用Distinct关键字时,查询结果集中的每一行都是唯一的,即使有多个列的值相同。Distinct关键字会对查询结果进行排序和去重操作,确保每一行都是唯一的。

row_number()是用于为查询结果集中的每一行分配一个唯一的行号。这个行号是根据指定的排序规则来确定的。row_number()函数可以用于分页查询、筛选出前N行等场景。它可以根据需要进行排序,并为每一行分配一个唯一的行号。

在某些情况下,使用Distinct和row_number()可能会得到不同的结果。这是因为Distinct关键字会对整个查询结果集进行去重操作,而row_number()函数只是为每一行分配一个行号,并不会去重。因此,在使用Distinct关键字时,可能会得到更少的行数,而使用row_number()函数时,可能会得到更多的行数。

以下是一个示例:

假设有一个表格名为"employees",包含以下数据:

| ID | Name | Department | |----|--------|------------| | 1 | John | HR | | 2 | John | IT | | 3 | Mary | HR | | 4 | Mary | IT | | 5 | Robert | Finance |

使用Distinct关键字进行查询:

SELECT DISTINCT Name, Department FROM employees;

查询结果:

| Name | Department | |--------|------------| | John | HR | | John | IT | | Mary | HR | | Mary | IT | | Robert | Finance |

使用row_number()函数进行查询:

SELECT Name, Department, ROW_NUMBER() OVER (ORDER BY Name) AS RowNum FROM employees;

查询结果:

| Name | Department | RowNum | |--------|------------|--------| | John | HR | 1 | | John | IT | 2 | | Mary | HR | 3 | | Mary | IT | 4 | | Robert | Finance | 5 |

在这个例子中,使用Distinct关键字得到了5行结果,而使用row_number()函数得到了与原始表格相同的行数。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云数据库:https://cloud.tencent.com/product/cdb
  • 腾讯云云服务器:https://cloud.tencent.com/product/cvm
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网:https://cloud.tencent.com/product/iot
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobdev
  • 腾讯云存储:https://cloud.tencent.com/product/cos
  • 腾讯云区块链:https://cloud.tencent.com/product/bc
  • 腾讯云元宇宙:https://cloud.tencent.com/product/mu
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

从rownumSQL需求还能归纳出知识

应该是分析函数生成列给个别名,然后外层再用这个别名<=10,而不是还用rownum<=10。 使用分析函数和rownum,两个逻辑不一样SQL得到相同结果集,只能说是巧合。...,可以看出department_id相同记录,别名是emp_id,会标记序号,而且按照employee_id顺序进行排列,体现出ROW_NUMBER()作用, ?...ROWNUM<=10作为条件得到19条aaa和1条bbb,而是返回正确19条aaa和10条bbb, ?..., a view with DISTINCT, GROUP BY, etc." // *Cause: // *Action: 我们从这条SQL,对应执行计划,就能看出来,需要排序是内层子查询视图结果集...对于数据检索顺序,多说一句,有时你看见,未必是真相,可以参考《Oracle读取数据顺序问题》对数据检索顺序探索。

59120

详述 SQL distinctrow_number() over() 区别及用法「建议收藏」

接下来,作者将给出详细说明。 2 distinct SQL ,关键字 distinct 用于返回唯一不同值。...将会得到如下结果: 观察该结果,咱们会发现在以上四条记录,包含两条 NAME 值相同记录,即第 2 条记录和第 3 条记录值都为“gavin”。...因为当 distinct 作用在多个字段时候,她只会将所有字段值都相同记录“去重”掉,显然咱们“可怜”四条记录并不满足该条件,因此 distinct 会认为上面四条记录并不相同。...首先,给出没有使用 row_number() over() 函数时查询结果,如下所示: 然后,运行如下 SQL 语句, select PPPRDER.CESHIDEMO.*, row_number(...当然,在此处咱们还可以通过不同限制条件来进行“去重”,具体如何实现,就需要大家自己去动脑思考啦!

1.2K20

详述 SQL distinctrow_number() over() 区别及用法

接下来,作者将给出详细说明。 2 distinct SQL ,关键字 distinct 用于返回唯一不同值。...因为当 distinct 作用在多个字段时候,她只会将所有字段值都相同记录“去重”掉,显然咱们“可怜”四条记录并不满足该条件,因此 distinct 会认为上面四条记录并不相同。...3 row_number() over() SQL Server 数据库,为咱们提供了一个函数 row_number() 用于给数据库表记录进行标号,使用时候,其后还跟着一个函数 over...首先,给出没有使用 row_number() over() 函数时查询结果,如下所示: ?...当然,在此处咱们还可以通过不同限制条件来进行“去重”,具体如何实现,就需要大家自己去动脑思考啦!

2.2K70

10 个高级 SQL 查询技巧

递归CTE有3个部分: 锚构件:返回CTE基本结果初始查询 递归成员:引用CTE递归查询。...它们都用来比较两个查询/表之间行。所说,这两个人之间存在微妙细微差别。 首先,除了过滤删除重复并返回不同行与不在不同行。...同样,除了查询/表相同数量列,其中不再与每个查询/表比较单个列。 6.自联结 一个SQL表自行连接自己。你可能会认为没有用,但你会感到惊讶是这是多么常见。...许多现实生活,数据存储一个大型表而不是许多较小。在这种情况下,可能需要自我连接来解决独特问题。 让我们来看看一个例子。...当存在关系时(例如,BOB vs Carrie),ROW_NUMBER()如果未定义第二条标准,则任意分配数字。 Rank()返回从1开始每行唯一编号,除了有关系时,Rank()将分配相同数字。

14910

10 个高级 SQL 概念

递归CTE有3个部分: 锚构件:返回CTE基本结果初始查询 递归成员:引用CTE递归查询。...它们都用来比较两个查询/表之间行。所说,这两个人之间存在微妙细微差别。 首先,除了过滤删除重复并返回不同行与不在不同行。...同样,除了查询/表相同数量列,其中不再与每个查询/表比较单个列。 6.自联结 一个SQL表自行连接自己。你可能会认为没有用,但你会感到惊讶是这是多么常见。...许多现实生活,数据存储一个大型表而不是许多较小。在这种情况下,可能需要自我连接来解决独特问题。 让我们来看看一个例子。...当存在关系时(例如,BOB vs Carrie),ROW_NUMBER()如果未定义第二条标准,则任意分配数字。 Rank()返回从1开始每行唯一编号,除了有关系时,等级()将分配相同数字。

93610

程序员需要了解十个高级SQL概念

递归CTE有3个部分: 锚构件:返回CTE基本结果初始查询 递归成员:引用CTE递归查询。...它们都用来比较两个查询/表之间行。所说,这两个人之间存在微妙细微差别。 首先,除了过滤删除重复并返回不同行与不在不同行。...同样,除了查询/表相同数量列,其中不再与每个查询/表比较单个列。 6.自联结 一个SQL表自行连接自己。你可能会认为没有用,但你会感到惊讶是这是多么常见。...许多现实生活,数据存储一个大型表而不是许多较小。在这种情况下,可能需要自我连接来解决独特问题。 让我们来看看一个例子。...当存在关系时(例如,BOB vs Carrie),ROW_NUMBER()如果未定义第二条标准,则任意分配数字。 Rank()返回从1开始每行唯一编号,除了有关系时,等级()将分配相同数字。

1.2K10

学 SQL 必须了解10个高级概念

递归CTE有3个部分: 锚构件:返回CTE基本结果初始查询 递归成员:引用CTE递归查询。...它们都用来比较两个查询/表之间行。所说,这两个人之间存在微妙细微差别。 首先,除了过滤删除重复并返回不同行与不在不同行。...同样,除了查询/表相同数量列,其中不再与每个查询/表比较单个列。 6.自联结 一个SQL表自行连接自己。你可能会认为没有用,但你会感到惊讶是这是多么常见。...许多现实生活,数据存储一个大型表而不是许多较小。在这种情况下,可能需要自我连接来解决独特问题。 让我们来看看一个例子。...当存在关系时(例如,BOB vs Carrie),ROW_NUMBER()如果未定义第二条标准,则任意分配数字。 Rank()返回从1开始每行唯一编号,除了有关系时,等级()将分配相同数字。

11110

2019Java面试宝典 -- 数据库常见面试题

Right Join: select * from tbl1 Right Join tbl2 where tbl1.ID = tbl2.ID 检索结果是tbl2所有数据和tbl1满足where 条件数据...SQL Select 语句完整执行顺序: 1、from 子句组装来自不同数据源数据; 2、where 子句基于指定条件对记录行进行筛选; 3、group by 子句将数据划分为多个分组; 4...通过 Web 表单输入(恶意)SQL 语句得到一个存在安全漏洞网站上数据库,而不是按照设计者意图去执行 SQL 语句。...(3)隔离性:隔离状态执行事务,使它们好像是系统在给定时间内执行唯一操作。如果有两个事务,运行在相同时间内,执行相同功能,事务隔离性将确保每一事务系统认为只有该事务使用系统。...31 and 40 --方法六:row_number() 变体,不基于已有字段产生记录序号,先按条件筛选以及排好序,再在结果集上给一常量列用于产生记录序号 select * from (select

2.2K20

学 SQL 必须了解10个高级概念

递归CTE有3个部分: 锚构件:返回CTE基本结果初始查询 递归成员:引用CTE递归查询。...它们都用来比较两个查询/表之间行。所说,这两个人之间存在微妙细微差别。 首先,除了过滤删除重复并返回不同行与不在不同行。...同样,除了查询/表相同数量列,其中不再与每个查询/表比较单个列。 6.自联结 一个SQL表自行连接自己。你可能会认为没有用,但你会感到惊讶是这是多么常见。...许多现实生活,数据存储一个大型表而不是许多较小。在这种情况下,可能需要自我连接来解决独特问题。 让我们来看看一个例子。...当存在关系时(例如,BOB vs Carrie),ROW_NUMBER()如果未定义第二条标准,则任意分配数字。 Rank()返回从1开始每行唯一编号,除了有关系时,等级()将分配相同数字。

1.1K30

必须了解十个高级 SQL 概念

递归CTE有3个部分: 锚构件:返回CTE基本结果初始查询 递归成员:引用CTE递归查询。...它们都用来比较两个查询/表之间行。所说,这两个人之间存在微妙细微差别。 首先,除了过滤删除重复并返回不同行与不在不同行。...同样,除了查询/表相同数量列,其中不再与每个查询/表比较单个列。 6.自联结 一个SQL表自行连接自己。你可能会认为没有用,但你会感到惊讶是这是多么常见。...许多现实生活,数据存储一个大型表而不是许多较小。在这种情况下,可能需要自我连接来解决独特问题。 让我们来看看一个例子。...当存在关系时(例如,BOB vs Carrie),ROW_NUMBER()如果未定义第二条标准,则任意分配数字。 Rank()返回从1开始每行唯一编号,除了有关系时,等级()将分配相同数字。

1.1K20

学 SQL 必须了解 10 个高级概念

递归CTE有3个部分: 锚构件:返回CTE基本结果初始查询 递归成员:引用CTE递归查询。...它们都用来比较两个查询/表之间行。所说,这两个人之间存在微妙细微差别。 首先,除了过滤删除重复并返回不同行与不在不同行。...同样,除了查询/表相同数量列,其中不再与每个查询/表比较单个列。 6.自联结 一个SQL表自行连接自己。你可能会认为没有用,但你会感到惊讶是这是多么常见。...许多现实生活,数据存储一个大型表而不是许多较小。在这种情况下,可能需要自我连接来解决独特问题。 让我们来看看一个例子。...当存在关系时(例如,BOB vs Carrie),ROW_NUMBER()如果未定义第二条标准,则任意分配数字。 Rank()返回从1开始每行唯一编号,除了有关系时,等级()将分配相同数字。

84820

必知必会十个高级 SQL 概念

使用常用表表达式(CTEs)是模块化和分解代码好方法,与您将文章分解为几个段落方式相同。 请在 Where 子句中使用子查询进行以下查询。...递归 CTE 有 3 个部分: 锚构件:返回 CTE 基本结果初始查询 递归成员:引用 CTE 递归查询。.... | null | ### 5.EXCEPT vs NOT IN 除了几乎不相同操作。它们都用来比较两个查询 / 表之间行。所说,这两个人之间存在微妙细微差别。...首先,除了过滤删除重复并返回不同行与不在不同行。 同样,除了查询 / 表相同数量列,其中不再与每个查询 / 表比较单个列。推荐:Java 面试练题宝典 ### 6....你可能会认为没有用,但你会感到惊讶是这是多么常见。许多现实生活,数据存储一个大型表而不是许多较小。在这种情况下,可能需要自我连接来解决独特问题。 让我们来看看一个例子。

93700

Oracle学习笔记整理手册

PS:本博客收录自己工作遇到学到一些Oracle技能,有时间就更新整理一下 (1)Oracle正则匹配使用 PS:这条SQL可以通过正则匹对查询一下,表A字段a是否有非数字数据,有时候数据表一些字段是...,右表示左外连接 (7)oracle去重关键字 Oracle关键字: distinct:过滤掉多余重复记录只保留一条 (8)Oracle不等于符号 oracle不等于有下面三种表示: !...=、^=、 可移植性好 (9)1=1和1=0 select * from t where 1=1 1=1条件始终为true,是为了避免负责条件查询出现错误 1=0条件始终未false,结果不会返回任何数据...所有表达式必须是相同类型,或者可以隐性转换为相同类型。..., 不包括重复行,相当于distinct, 同时进行默认规则排序; union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复; (14)exist和in

1K10

sql语句_ 三种去重方法

架构师必看网-架构君整理 如结果(1): name xiaogang xiaohei xiaoli xiaoming 可是我现在又想得到Id值,改动如下 select distinct name,...即必须得id与name都相同才会被排除 2. group by  select name from userinfo groub by name  运行上面3行sql结果如上面distinct结果...over  SQL Server 通过Row_Number 函数给数据库表记录进行标号,使用时候后面会跟over 子句,而over 子句主要用来对表记录进行分组和排序。...(2)使用group by 分组后,select可以选择分组字段,和非分组字段函数值,如 max()、min()、sum、count()等 distinctrow_number over()...区别: (1)distinctrow_number over 都可以实现去重功能,而distinct 作用于当行时候,其"去重" 是去掉表字段所有重复数据,作用于多行时候是,其"去重"所有字段都相同数据

99910

去除重复数据

对于第一种重复,比较容易解决,只需查询语句中使用distinct关键字去重,几乎所有数据库系统都支持distinct操作。发生这种重复原因主要是表设计不周,通过给表增加主键或唯一索引列即可避免。...select distinct * from t; 对于第二类重复问题,通常要求查询出重复记录任一条记录。...假设表t有id,name,address三个字段,id是主键,有重复字段为name,address,要求得到这两个字段唯一结果集。...-- Oracle、MySQL,使用相关子查询 select * from t t1 where t1.id = (select min(t2.id) from t t2 where t1....name = t2.name and t1.address = t2.address); -- Hive只支持FROM子句中使用子查询,子查询必须有名字,并且列必须唯一 select t1.*

1.9K60

leetcode-for-sql-排名和窗口函数

MySQL5 实现开窗函数 最初接触到SQL排名是一名日本作者MICK写书中:《SQL进阶教程》,感兴趣可以认真阅读下,对SQL提升很有帮助。...题目 首先介绍下具体题目:编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后下一个名次应该是下一个连续整数值。...Scores 表,你查询应该返回(按分数从高到低排列):相同分数采取相同排名,下个排名没有间隔。...现在给定五个成绩:93,93,85,80,75,分别使用3个不同开窗函数得到结果分别是: 1、使用 DENSE_RANK() 进行排名会得到:1,1,2,3,4 2、使用 RANK() 进行排名会得到...总结下: hive或者 MySQL8 已经存在函数能够实现 MySQL5 需要自己根据不同场景需求来写脚本统计 3种开窗函数使用务必掌握

28420

【数据库设计和SQL基础语法】--查询数据--聚合函数

3.2 聚合函数与 GROUP BY 结合使用 SQL ,聚合函数与 GROUP BY 子句结合使用,用于对数据进行分组并对每个分组应用聚合函数,从而得到按组计算结果。...GROUP BY GROUPING SETS: 关键字,指定多组分组语法。 注意事项 GROUPING SETS 允许对多个列进行不同层次分组,可以一个查询实现多个不同维度聚合。...ROW_NUMBER() 是一个强大窗口函数,为查询结果行分配唯一行号,常用于需要为结果集中行进行排序或排名场景。...优化查询 考虑查询优化: 如果 DISTINCT 是为了解决查询结果重复数据问题,可以考虑优化查询语句,确保关联条件和过滤条件准确性。...大数据环境下,可能需要考虑其他方法来达到相同目的,以保证查询性能。 八、总结 聚合函数是SQL重要工具,用于对数据进行汇总和计算。

38410
领券