Sql 无法在Oracle的窗口函数中使用ORDER BY子句

Sql 无法在Oracle的窗口函数中使用ORDER BY子句,sql,oracle,window-functions,Sql,Oracle,Window Functions,我有一个查询,在窗口函数中没有orderby子句时,它可以正常工作: select "TABLE_NAME", "DENSITY", "NUM_DISTINCT", ROWNUM, median(DENSITY) OVER (PARTITION BY table_name ) from ALL_TAB_COLUMNS a where 1=1 and owner = 'SYS' and table_name='CARRY' and "NUM_DISTINCT" < 1000 and DENS

我有一个查询,在窗口函数中没有
orderby
子句时,它可以正常工作:

select
"TABLE_NAME",
"DENSITY",
"NUM_DISTINCT",
ROWNUM,
median(DENSITY) OVER (PARTITION BY table_name )
from ALL_TAB_COLUMNS a
where 1=1
and owner = 'SYS'
and table_name='CARRY'
and "NUM_DISTINCT" < 1000
and DENSITY < 1
AND num_nulls = 0
以下是完整的SQL语句,其顺序如下:

select
"TABLE_NAME",
"DENSITY",
"NUM_DISTINCT",
ROWNUM,
median(DENSITY) OVER (PARTITION BY table_name ORDER BY "DENSITY")
from ALL_TAB_COLUMNS a
where 1=1
and owner = 'DEANZA'
and table_name='CARRIER_A'
and "NUM_DISTINCT" < 1000
and DENSITY < 1
AND num_nulls = 0
选择
“表格名称”,
“密度”,
“NUM_DISTINCT”,
罗纳姆,
中位数(密度)超过(按表划分\u按“密度”排序)
从所有_选项卡_列a
其中1=1
所有者='DEANZA'
和表_name='CARRIER'u A'
和“NUM_DISTINCT”<1000
密度<1
和num_nulls=0
如中所述,对于
中值
,您不能在其
OVER
子句中使用
ORDER BY

中值
将获取一个数值或日期时间值,并返回中间值或插值,一旦对值进行排序,该值即为中间值。因此,无论如何都不需要使用
orderby

如中所述,对于
中值
,您不能在其
OVER
子句中使用
orderby


中值
将获取一个数值或日期时间值,并返回中间值或插值,一旦对值进行排序,该值即为中间值。因此,无论如何都不需要使用排序依据。

不,您绝对不需要在中值(…)函数中使用排序依据。你知道中位数是做什么的吗?你需要什么-对于第三行,你需要前三个密度值的中值密度,然后对于第十行,需要前十个密度值的中值,等等?您可能需要它做什么?将
按密度排序
放在查询末尾,而不是放在
中值
计算中。您不能在
中值
分析函数中使用
排序依据
,而当您在允许使用
排序依据
的分析函数中使用
排序依据
时,它与结果排序无关。您试图实现什么?样本数据和期望的结果在交流中会有很大的帮助。不,你绝对不需要在中值(…)函数中使用ORDER BY。你知道中位数是做什么的吗?你需要什么-对于第三行,你需要前三个密度值的中值密度,然后对于第十行,需要前十个密度值的中值,等等?您可能需要它做什么?将
按密度排序
放在查询末尾,而不是放在
中值
计算中。您不能在
中值
分析函数中使用
排序依据
,而当您在允许使用
排序依据
的分析函数中使用
排序依据
时,它与结果排序无关。您试图实现什么?样本数据和期望的结果对沟通有很大的帮助。你了解ORDER BY在分析函数中的作用吗?它与整个分区的排序关系不大。是的,我猜OP认为中位数不会首先对数据进行排序。
order by
将有助于窗口显示前面3行和前面1行之间的
行。您了解order by在分析函数中的作用吗?它与整个分区的排序没有什么关系。是的,我猜OP认为中位数不会首先对数据进行排序。
orderby
对于在前面3行和前面1行之间的
行进行窗口处理非常有用。
select
"TABLE_NAME",
"DENSITY",
"NUM_DISTINCT",
ROWNUM,
median(DENSITY) OVER (PARTITION BY table_name ORDER BY "DENSITY")
from ALL_TAB_COLUMNS a
where 1=1
and owner = 'DEANZA'
and table_name='CARRIER_A'
and "NUM_DISTINCT" < 1000
and DENSITY < 1
AND num_nulls = 0