Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/03/2011, 01h19   #1
Candidat au titre de Membre du Club
 
Inscription : août 2006
Messages : 116
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 116
Points : 10
Points : 10
Par défaut ORA-00904: "V"."DEPARTEMENT" : identificateur non valide

Salut,
j'ai une requête similaire à la requête suivante et d'ailleurs qui me retourne la même erreur :
Citation:
select v.nom
from Ville v
inner join (select AVG (vl.population) as moyenne,
max (vl.departement) as departement
from Ville vl
where vl.departement = v.departement) pop_par_dpt
on v.departement = pop_par_dpt.departement
where v.population >= pop_par_dpt.moyenne ;
l'erreur produite est celle que j'ai mis en commentaire :
Citation:
ORA-00904: "V"."DEPARTEMENT" : identificateur non valide
je cherche la solution mais je l'ai pas encore trouvé, qu'en pensez vous ?
Merci
edogawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 01h53   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Tu mélanges les jointures et les requêtes corrélées, donc si j'ai bien compris le besoin
avec jointure :
Code :
1
2
3
4
5
6
7
8
SELECT v.nom
  FROM Ville v
  JOIN (SELECT vl.departement, AVG (vl.population) AS moyenne
          FROM Ville vl
         GROUP BY vl.departement
       ) pop_par_dpt
    ON v.departement = pop_par_dpt.departement
 WHERE v.population >= pop_par_dpt.moyenne
avec requêtes corrélées :
Code :
1
2
3
4
5
SELECT v.nom
  FROM ville v
 WHERE v.population >= (SELECT avg(vl.population) 
                          FROM ville vl 
                         WHERE vl.departement = v.departement)
Il y a aussi une possibilité avec une fonction analytique et un seul accès à la table (mais sous-requête):
Code :
1
2
3
4
5
6
SELECT nom 
  FROM (SELECT nom, population, departement,
               avg(population) over (partition BY departement) AS pop_dept
          FROM ville
       )
 WHERE population >= pop_dept
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h06.


 
 
 
 
Partenaires

Hébergement Web