Oracle order by query 使用 select case

Posted

技术标签:

【中文标题】Oracle order by query 使用 select case【英文标题】:Oracle order by query using select case 【发布时间】:2021-04-23 13:56:25 【问题描述】:

在 Oracle Live SQL 中,我尝试使用 select(case when)查询来使用简单的 sql 排序

我试图得到相同的结果 select * from tt order by 1

将 1 替换为 (select (case when 1=1 then 1 else 2 end) from dual)

但是两个结果完全不同。

我想要按第 1 列排序的表,但是当查询不按第 1 列排序时使用选择案例的查询。

我不知道为什么,想知道这个查询在 oracle db 中是如何工作的

【问题讨论】:

***.com/questions/54133093/… 【参考方案1】:

比较

   ... 
   order by 2

   ... 
   order by 1+1

在“编译”时,第一个2 是一个整数常量,因此它是列的位置,数据库引擎按指定的列排序。第二个1+1 是一个整数表达式,数据库引擎按此值“2”排序。同样,(select (case when 1=1 then 1 else 2 end) from dual) 是一个表达式,而不是列规范。

【讨论】:

【参考方案2】:

当您在ORDER BY 子句中指定一个数字时,Oracle 将按结果选择的该列进行排序。例如,ORDER BY 1,2 将按第一列排序,然后是第二列。如果没有第二列,则会出现错误。

在最外层查询的ORDER BY 中,您的查询中基本上没有发生排序,因为1 总是从您的子查询返回。这是按值 1 而不是第一列排序。

如果您解释了您希望实现的逻辑,那么我们也许可以提供帮助,但这就是您现有查询的情况。

【讨论】:

基于什么逻辑?您示例中的 case 语句不会按任何内容排序。 如果您有示例数据和您尝试通过该输出实现的输出,请以文本格式(而非图像)共享两者 我尝试在查询时使用 case 以 1 获得相同的结果顺序,所以首先,我在 order 后使用 select 查询,期望返回 1,最后我想从 tt order 中获取 select * 1 为什么此查询不按第 1 列排序?? 这就是 oracle 的工作原理。如果您用一些示例数据解释您试图实现的逻辑,那么也许其他人可以提供帮助。

以上是关于Oracle order by query 使用 select case的主要内容,如果未能解决你的问题,请参考以下文章

Oracle over函数

oracle RANK() dense_rank()

无法使用 _delete_by_query 删除 Elasticsearch 中的项目

ElasticSearch删除数据插件delete-by-query

elasticsearch 5.x Delete By Query API(根据条件删除)

es xxx_by_query