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

Requêtes MySQL Discussion :

somme sur plusieurs champs et mise à jour du champ correspondant


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut somme sur plusieurs champs et mise à jour du champ correspondant
    Bonjour à tous

    Est ce qu'on peut m'aider sur cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update actifs 
    set total = SUM(imm_nettes + imm_financieres + autresANC + stocks + clientsEtComptes + autresActifsCourants + placements + liquiditeEtEquivalentDeLiquidite) 
    where an in (2009, 2010);
    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 67
    Points : 83
    Points
    83
    Par défaut
    Quel problème rencontres-tu avec cette requête ?

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Si une des colonnes imm_nettes , imm_financieres , autresANC , stocks , clientsEtComptes , autresActifsCourants , placements , liquiditeEtEquivalentDeLiquidite est NULL, le résultat sera faux, j'imagine que c'est ça le problème ?
    A lire autour des NULL

    Utilise COALESCE, ex: COALESCE(placements,0) pour chaque colonne

  4. #4
    Membre averti

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Points : 351
    Points
    351
    Par défaut c'est une erreur de synthaxe (SUM => agrégation)
    Bonjour,
    SUM sert lorsqu'on agrège les données avec GROUP BY, cela sert à faire la somme des différentes lignes sur une seule colonne.
    Ici je pense que vous voulez simplement additionner les valeurs d'autres colonnes de la table, dans ce cas inutile de mettre SUM qui n'a rien à faire ici, on indique simplement le nom des colonnes.
    Cependant je doute qu'ajouter cette colonne soit très judicieux, cela prend de la place sur le disque et en mémoire et si jamais la valeur d'une des colonnes change le total n'est plus bon (à moins de mettre un trigger). Il vaut mieux le faire dynamiquement dans une vue ou encore directement dans le programme qui utilise les données.
    Bon courage

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Effectivement il y a une erreur de syntaxe, mais un SUM sans GROUP BY est tout à fait valide syntaxiquement tant que ça répond au besoin...

    Ici il faudrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE actifs 
    SET total = (select SUM(imm_nettes + imm_financieres + autresANC + stocks + clientsEtComptes + autresActifsCourants + placements + liquiditeEtEquivalentDeLiquidite) from actifs WHERE an IN (2009, 2010))
    WHERE an IN (2009, 2010);
    Mais effectivement le SUM n'est peut être pas nécessaire dans le cas présent et je suis tout à fait d'accord que le besoin d'UPDATE est douteux, le conseil de la vue étant très bon et sûrement la méthode à adopter.

  6. #6
    Membre averti

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Points : 351
    Points
    351
    Par défaut
    Oui, effectivement, on peut faire un SUM sans le GROUP BY mais seulement si on veut avoir le total de toutes les lignes, sans regroupement.
    Là, à mon avis, ce n'est pas ce qu'on veut, c'est assez bizarre de vouloir ajouter une colonne avec le total de plusieurs colonnes sur l'ensemble des lignes ...
    Je pense vraiment qu'il y a confusion, j'avais fait de même au tout début quand j'ai appris sql, je pensais à la fonction sum de Excel, j'ai l'impression que c'est le même cas ici. Il nous faut plus d'informations de rannou2609.

  7. #7
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 040
    Points : 23 795
    Points
    23 795
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Effectivement il y a une erreur de syntaxe, mais un SUM sans GROUP BY est tout à fait valide syntaxiquement tant que ça répond au besoin...
    Ouh là... Pas vraiment, non... MySQL est sans doute le seul SGBD à tolérer cette syntaxe, ce qui est d'ailleurs très souvent source d'erreurs.
    Un peu de lecture sur le sujet : http://cedric-duprez.developpez.com/...fier-group-by/

    ced

  8. #8
    Membre averti

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Points : 351
    Points
    351
    Par défaut
    Bonjour,
    Je ne comprends pas, on peut faire qq chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT SUM(colonne1) FROM matable
    A partir du moment où on ne veut pas de regroupement pour faire des sous totaux, il n'y a pas de problème, je le faisais sous Sql Server sans soucis. Là où cela ne va pas, c'est quand on ajoute des colonnes de la table sur lesquelles on ne fait pas d'opérations d'agrégation, là alors que Mysql s'en fiche, Sql Server refuse en indiquant que ces colonnes doivent apparaitre dans le GROUP BY.
    Je me trompe ?

  9. #9
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    A mon avis ced a lu trop vite ce que j'ai écrit. En tout cas je connais très bien cet article auquel je me réfère souvent dans mes réponses sur le forum mysql

  10. #10
    Membre averti

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Points : 351
    Points
    351
    Par défaut
    Je pense qu'il fait allusion à "l'erreur" de Mysql dans l'utilisation des GROUP BY.
    Moi même, j'ai commencé par Sql Server, lorsque je suis arrivé sur Mysql je n'ai pas compris ce que disait les autres.
    Le problème est que beaucoup de monde commence avec Mysql, du coup ils prennent de mauvaises habitudes avec cette mauvaise syntaxe.
    Dans une base autre de Mysql, la requête comprend deux éléments :
    - les colonnes sur lesquelles on opère les calculs avec SUM, COUNT, AVG, etc
    - les colonnes qui servent à regrouper les résultats en sous totaux
    Toutes ces dernières colonnes doivent apparaître dans le GROUP BY, c'est obligatoire.
    Dans Mysql, le moteur ne nous oblige pas de le faire, mais attention le résultat n'est pas le même. Le regroupement pour les calculs ne se fait que si on a précisé la colonne dans GROUP BY. A défaut j'ai remarqué que Mysql indiquait la première valeur rendue dans la requête sans le GROUP BY, c'est donc une valeur aléatoire, qui peut être bonne comme fausse.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/04/2011, 15h06
  2. [AC-2003] Mise à jour de champ calculé sur formulaire continu
    Par paidge dans le forum VBA Access
    Réponses: 0
    Dernier message: 02/09/2010, 18h20
  3. Réponses: 12
    Dernier message: 30/11/2009, 00h12
  4. Fonction de mise à jour du champ TTC en fonction du champ HT
    Par francois134 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/08/2009, 21h25
  5. Réponses: 11
    Dernier message: 08/01/2008, 11h36

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