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

  1. #1
    Nouveau Candidat au 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
    Points : 1
    Points
    1
    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 éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 242
    Points : 12 874
    Points
    12 874
    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
    Nouveau Candidat au 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
    Points : 1
    Points
    1
    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 actif
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 136
    Points : 241
    Points
    241
    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
    Nouveau Candidat au 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
    Points : 1
    Points
    1
    Par défaut
    Merci, je vais essayer cette modification, et je te dirai le résultat

    bonne journée

  6. #6
    Nouveau Candidat au 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
    Points : 1
    Points
    1
    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 096
    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 096
    Points : 9 480
    Points
    9 480
    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.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    556
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 556
    Points : 1 198
    Points
    1 198
    Par défaut
    Bonjour,

    Le moteur HFSQL ne sait pas faire d'opération mathématique sur un agrégat.
    Vous devez donc ruser :
    - soit l'opération arithmétique peut être contenu dans l'agrégat, par exemple : COUNT(rub1 + 10 - rub2)
    - soit en passant par une sous-requête qui s'occupe du COUNT(rub1) AS tot, puis la requête principale qui s'occupera de l'opération mathématique voulu : tot*100/rub2 AS ratio

    cordialement.

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