2017-02-22 3 views
2

J'essaie d'exécuter ce code, mais il dit qu'il me manque quelque chose en row_number() expression que je ne suis pas en mesure de comprendre du tout.ORA - 00936 erreur mais impossible de trouver ce qui manque dans la ligne 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

Vous n'utilisez pas 'r1', il n'est donc pas nécessaire de le calculer. –

Répondre

2

Il ne devrait pas être une virgule entre la clause partition by et la clause order by. Il suffit de l'enlever et vous devriez être OK:

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

Merci beaucoup. le fera – Vish

1

Votre requête peut être simplifiée:

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); 

Je retiré r1 parce qu'il n'est pas utilisé.

+0

Merci. donc min (longueur (s.city)) sur() que min_length fonctionnerait? pouvez-vous expliquer ce que l'on appelle la fonction "sur()" s'il vous plaît? – Vish

+1

@Vish. . . Je ne comprends pas votre commentaire. Le code semble assez clair: il calcule la longueur minimale de la ville sur toutes les données. –

+0

Je voulais dire que la paranthésis ne contenait rien à l'intérieur, n'est-ce pas? – Vish