2017-02-22 6 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 будет работать? Можете ли вы объяснить, что funtion называется «over()», пожалуйста? – Vish

+1

@Vish. , , Я не понимаю ваш комментарий. Код кажется довольно ясным: он вычисляет минимальную длину города по всем данным. –

+0

Я имел в виду, что паратезис не вмещал в него что-то прямо? – Vish

Смежные вопросы