IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Requête avec la fonction AVG


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 11
    Par défaut Requête avec la fonction AVG
    Bonjour , j'ai un problème lors de l'exécution de ma requête qui est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select Nom_Ville
    from Villes, Habitants
    where  Habitants.Code_Ville=Villes.Code_Ville having  avg (Nb_Habitants)<Nb_Habitants;
    ma base contient la table villes(Code_Villes,Nom_Ville,Nb_Habitants) et la table Habitants(Matric,Code_Ville,Nom)
    je veux afficher les noms des villes qui ont plus que la moyenne des nombres d'habitants des villes , en exécutant ma requête j'ai eu l'erreur : not a group by expression
    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Par défaut
    Bonjour,

    Si ton SELECT contient autre chose que des fonctions d'agrégation il faut une clause GROUP BY

    Dans ton cas le plus simple est de faire une sous requête qui calcule la moyenne du nombre d'habitants de toutes les villes
    C'est aussi faisable avec AVG utilisée comme une fonction OLAP (cf http://lalystar.developpez.com/fonctionsAnalytiques)

    Bonne Soirée

  3. #3
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Si on peut mettre un Having sans Group By, ou un Group By sans Having, en général on met plutôt Group By puis Having car le Having filtre sur une fonction de groupe, en général introduite par le Group By.
    Ici la fonction est avg(Nb_Habitants) mais elle n'existe pas dans la partie SELECT donc message d'erreur.

    Essaye plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select Nom_Ville
    from Villes
    where Nb_Habitants>(SELECT avg(Nb_Habitants) from Villes)
    order by Nom_Ville;

  4. #4
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 11
    Par défaut
    oui ça marche bien, merci

  5. #5
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 11
    Par défaut max
    j'ai également créer une table Pays(Code_Pays, Nom_Pays) et je voudrais afficher le pays qui la max de nombre d'habitants j'ai esséyer plusieurs requete mais ça n'a pas marché, j'ai esseyé avec max :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select Nom_Pays 
    from Pays,Villes
    where (select max(Villes.Nb_Habitants) from Villes )
    order by Nom_Pays;
    erreur : expression absente
    et j'ai esséyé avec join :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select Nom_Pays 
    from Pays join Villes on (select max (Nb_Habitants))
    order by Nom_Pays;

  6. #6
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Houlalalala, pas bon, il faudrait que tu relises comment faire des jointures selon la syntaxe ANSI SQL 92 car là... la jointure doit se faire sur un nom de colonne, pas sur une expression.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from Pays join Villes on (select max (Nb_Habitants))

  7. #7
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 11
    Par défaut
    j'ai essayé cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select Nom_Pays 
    from Pays
    join Villes on(Villes.Code_Pays=Pays.Code_Pays)
    group by Nom_Pays
    having max(Nb_Habitants) in (select max(Nb_Habitants) from Villes)
    ;
    mais le résultat n'est pas exact , alors est-ce que je peut exécuter cette requête sans jointure?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/09/2014, 17h07
  2. Problème avec la fonction AVG
    Par cirtey dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 02/05/2007, 13h03
  3. Problème dans requête avec la fonction Right
    Par Mariboo dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 17/08/2006, 10h27
  4. #Erreur dans une requête avec une fonction personnalisée
    Par pguiheu dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 04/07/2006, 15h45
  5. [Débutant / SQL] Requête avec la fonction MAX
    Par bugmenot dans le forum Access
    Réponses: 3
    Dernier message: 14/04/2006, 10h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo