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

Langage SQL Discussion :

Utilisation d'un champ calculé dans le where


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 172
    Points
    172
    Par défaut Utilisation d'un champ calculé dans le where
    Bonjour.

    J'ai une table avec des projets et une autre table avec des opérations.
    Avec cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select P.Nom, sum(O.Montant) as Total from projets P, operations O where O.id_projet=P.id group by P.id
    j'obtiens bien la liste des projets avec le total des opérations concernant chaque projet.

    Je peux utiliser Total pour trier en ajoutant : "order by Total" à la fin de la requête.

    En revanche, je ne peux pas utiliser Total dans le where. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select P.Nom, sum(O.Montant) as Total from projets P, operations O where O.id_projet=P.id and Total=4000 group by P.id order by Total
    me renvoie l'erreur : "misuse of aggregate: sum()"

    Avez-vous une solution ?

  2. #2
    Membre éclairé
    Avatar de Wachter
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2008
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 404
    Points : 734
    Points
    734
    Par défaut
    Bonjour,

    Le total SUM(Montant) est à placer dans la clause HAVING et non WHERE. Tu peux également d'abord écrire une sous-requête qui calcule le total puis filtrer le résultat via la clause WHERE.
    Code parrain certification Voltaire : NTMPH759

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Bonjour,

    C'est dans la clause HAVING que se placent les restrictions sur le résultat d'une agrégation.

    Par ailleurs, les jointures s'effectuent depuis des lustres en utilisant l'opérateur JOIN.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select  P.Nom
        ,   sum(O.Montant) as Total 
    from    projets     P
        inner join
            operations  O 
            on  O.id_projet = P.id 
    group by P.id 
    having  Total = 4000 
    order by Total
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 172
    Points
    172
    Par défaut
    Merci à tous les deux.

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

Discussions similaires

  1. Utiliser des champs calculé dans un criteria Hibernate
    Par bernidupont dans le forum Hibernate
    Réponses: 4
    Dernier message: 11/11/2017, 21h32
  2. [AC-2010] Utiliser un champ calculé dans une table comme clé primaire
    Par jawed dans le forum Access
    Réponses: 4
    Dernier message: 21/10/2016, 09h49
  3. Réponses: 1
    Dernier message: 03/10/2016, 01h04
  4. Ré utiliser des champs calculés dans une requête
    Par boby62423 dans le forum Développement
    Réponses: 6
    Dernier message: 11/03/2011, 16h43
  5. champs calculé dans la clause where
    Par Issam dans le forum Développement
    Réponses: 8
    Dernier message: 18/01/2011, 11h20

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