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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Par défaut Les fonctions agrégats (COUNT, AVG, SUM, MIN, MAX) ne sont pas autorisées en dehors des clauses SELECT ou HAVI
    j'ai un probleme aves la requete suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    SELECT 
    liste_formation.id_formation,
    libelle_sujet_formation_ar ,
    libelle_sujet_formation_fr, 
    DATE_FORMAT(debut,'%Y-%m-%d') AS debutto,
    DATE_FORMAT(fin,'%Y-%m-%d') AS fine, 
    duree,
    libelle_formation_ar, 
    libelle_formation_fr,
    particip_estimatif,
    COUNT(formation_effectuee.id_formation) AS particip_reel,
    COUNT(formation_effectuee.id_formation)*100/particip_estimatif as pourcentage,
    cout_global
    FROM 
    liste_formation,
    sujet_formation,
    emplacement_formation,
    formation_effectuee
    WHERE
    liste_formation.id_sujet_formation=sujet_formation.id_sujet_formation
    AND
    emplacement_formation.id_emplacement=liste_formation.id_emplacement
    AND
    formation_effectuee.id_formation=liste_formation.id_formation
    AND
    year(debut)='2014'
    GROUP BY
    liste_formation.id_formation,
    libelle_sujet_formation_ar,
    libelle_sujet_formation_fr, 
    DATE_FORMAT(debut,'%Y-%m-%d'),
    DATE_FORMAT(fin,'%Y-%m-%d'), 
    duree,
    libelle_formation_ar, 
    libelle_formation_fr,
    particip_estimatif,
    formation_effectuee.id_formation,
    cout_global  
    ORDER BY debutto ASC;
    j'obtient l'erreur suivante: Les fonctions agrégats (COUNT, AVG, SUM, MIN, MAX) ne sont pas autorisées en dehors des clauses SELECT ou HAVING

    svp aidez moi
    merci bcp

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 430
    Par défaut
    Bonjour,
    Le message est assez bizarre, mais je note bien une erreur (qui a peut-être un lien ?) dans ta requête: tu utilises une fonction d'agrégation sur formation_effectuee.id_formation, et tu as cette même colonne dans le GROUP-BY. Ca n'a pas de sens.

    Tatayo.

    P.S. Pense aux balises CODE pour rendre ton message plus lisible.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Par défaut Ajout des balises [CODE] mon code [/CODE] (bouton #)
    La requête fonctionne correctement lorsque j'enlève cette ligne :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    COUNT(formation_effectuee.id_formation)*100/particip_estimatif as pourcentage

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 136
    Par défaut
    Citation Envoyé par bechir_fathallah Voir le message
    le requete fonctionne correctement lorsuqe j'neleve cette ligne : COUNT(formation_effectuee.id_formation)*100/particip_estimatif as pourcentage,
    Le problème doit venir de "particip_estimatif".
    Cette ligne de select contient une fonction d'agrégat (COUNT) et une partie qui n'est pas de l'agrégat (même si particip_estimatif est dans le group by).
    en utilisant cette ligne à la place, ça devrait retourner le même résultat que celui souhaité, sans problème (et en testant la division par 0)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF (MAX(particip_estimatif)=0, 0, COUNT(formation_effectuee.id_formation)*100/MAX(particip_estimatif) ) as pourcentage,
    J'avoue ne pas être certain qu'il accepte qu'un IF repose sur des fonctions d'agrégat.
    Peut-être aussi que le problème vient simplement du fait que particip_estimatif vaut 0 dans certains enregistrement.

    Et peut-être aussi que je me trompe complétement. Dans ce cas, je suis désolé.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Par défaut
    Merci, je vais essayer cette modification, et je te dirai le résultat

    bonne journée

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Par défaut
    bonjour je viens d'essayer le code mais le même probleme persiste, que dois-je faire?

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 221
    Par défaut
    Bonjour,
    2 ou 3 pistes pour avancer:
    1. Peux-tu montrer la dernière version de la requête, parce qu'on est en train de commenter un truc qu'on ne voit pas !
    2. Fais un test en enlevant purement et simplement le calcul du pourcentage ( donc en supprimant la colonne : COUNT(formation_effectuee.id_formation)*100/particip_estimatif as pourcentage ). Si ce test tourne correctement, tu auras la confirmation que le bug est sur cette ligne.

Discussions similaires

  1. Python => Aide sur les fonctions min() et max() de Python
    Par PythonNovices dans le forum Général Python
    Réponses: 2
    Dernier message: 30/12/2014, 16h28
  2. Query : min and max ne sont pas pris en compte
    Par devware33 dans le forum JPA
    Réponses: 8
    Dernier message: 05/12/2014, 16h30
  3. [Propel] criteria propel et les fonction agrégat
    Par wiemesti dans le forum ORM
    Réponses: 0
    Dernier message: 28/12/2010, 11h58
  4. Fonction d'évaluation d'un jeu de dames utilisant l'algorithme du min/max
    Par elron8 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 31/01/2007, 11h04
  5. Coupler les fonction COUNT et MAX
    Par Pascal Lob dans le forum Langage SQL
    Réponses: 5
    Dernier message: 27/03/2006, 09h45

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