2017-02-22 116 views
2

我试图执行此代码,但它说我缺少一些row_number()表达式,我根本找不到。ORA - 00936错误,但有能力找到第2行缺少的东西

with summary as 
(select s.city, length(s.city) as C_length, 
row_number() over (partition by length(s.city), order by s.city) 
as r1 from station s 
where 
length(s.city) = (SELECT min(LENGTH(s1.CITY)) FROM STATION s1) 
or length(s.city) = (SELECT max(LENGTH(s2.CITY)) FROM STATION s2)) 
select su.city, su.C_length 
from summary su; 
+0

您不使用'r1',因此不需要计算它。 –

回答

2

不应该有在partition by子句和order by子句之间的逗号。只是删除它,你应该确定:

row_number() over (partition by length(s.city) order by s.city) 
-- Comma removed here ------------------------^ 
+1

非常感谢。将这样做 – Vish

1

您的查询可以简化为:

with summary as (
     select s.city, length(s.city) as C_length, 
      min(length(s.city)) over() as min_length, 
      max(length(s.city)) over() as max_length, 
     from station s 
    ) 
select su.city, su.C_length 
from summary su 
where c_length in (min_length, max_length); 

我删除r1,因为不使用它。

+0

谢谢。所以min(length(s.city))over()作为min_length会起作用吗? 你能解释一下什么功能叫做“over()”吗? – Vish

+1

@Vish。 。 。我不明白你的评论。代码看起来很清楚:它正在计算所有数据的城市最小长度。 –

+0

我的意思是这个假设没有包含任何东西吗? – Vish