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 :

Group by et SUM ne me donne pas le bon résultat


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Points : 45
    Points
    45
    Par défaut Group by et SUM ne me donne pas le bon résultat
    Bonjour tout le monde;

    j'ai ce tableau dans ma base de données :
    Nom : Sans titre-1.jpg
Affichages : 437
Taille : 32,6 Ko

    et je veux filtrer mes données, je veux avoir la somme des prix selon le même jeu qui se trouve dans le même dépot, pour cela j'ai fait ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                sql = "SELECT SUM(id_qte) AS muk, id_article FROM associationdepotarticle GROUP BY id_depot";
                                command = new SQLiteCommand(sql, connectiondb);
                                SQLiteDataReader reader2 = command.ExecuteReader();
     
                                while (reader2.Read())
                                {
                                    MessageBox.Show(reader2["id_article"].ToString() + reader2["muk"].ToString());
                                }
    mais malheuresement la requête ne me donne pas les bons résultats, que dois-je corriger ? merci d'avance

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    je suis curieux de savoir le résultat que tu obtiens.
    Sinon c'est plutôt une question SQL.
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    A priori la requête semblerait fonctionner correctement (voir ici)
    Mais en fait ça donne le "bon résultat" (sous réserve d'avoir bien compris l'objectif de la requête) parce que le jeu d'essai fourni ne représente pas tous les cas possibles.
    Pour preuve, cet exemple avec juste un élément en plus
    Sans parler du fait qu'on perd de l'information : "tel jeu a telle quantité mais dans quel dépôt ?"

    Sinon je rejoins jopopmk sur le fait que c'est plus une question de SQL
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Ben id_article ne fait pas parti des regroupements et n'est soumis à aucune fonction d'agrégation, du coup ça peut donner du grand n'importe quoi.
    Et quand ça fonctionne ! Oracle par exemple ne laisse pas passer une telle requête.
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Points : 45
    Points
    45
    Par défaut
    salut mes amis;
    normalement je dois avoir:
    Sonic - DEPOT4 : 17
    streetfighter - DEPOT3: 6
    Castlevania - depot2: 1
    Sonic - depot1 : 2


    quand je fais seulement ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(id_qte) AS muk FROM associationdepotarticle
    il me donne la somme total donc le SUM fonction mais une fois j'ajoute GROUP BY, il commence à me donner n'import quoi :/

    bizare

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 792
    Points : 34 013
    Points
    34 013
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(id_qte) AS muk, id_article FROM associationdepotarticle GROUP BY id_depot
    La requête est fausse !
    Toutes les colonnes du SELECT ne faisant pas l'objet d'une fonction de groupage doivent figurer dans le GROUP BY sous peine de voir des valeurs aléatoires pour les colonnes manquantes.

    j'ai ce tableau dans ma base de données :
    Les tableaux sont dans les musées ou dans les pages web mais une base de données contient des tables !

    je veux avoir la somme des prix selon le même jeu qui se trouve dans le même dépot
    Vous devez donc grouper par jeu et par dépôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY id_article, id_depot
    Euh... vous additionnez l'identifiant des quantités ?
    Ne voulez-vous pas additionner les prix (ce qui est encore une idée bizarre, d'ailleurs !) ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Points : 45
    Points
    45
    Par défaut
    j'ai oublie id_article dans GROUP BY ok merci

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Points : 45
    Points
    45
    Par défaut
    Juste un truc mes amis:

    l'enregistrement se fait dans des ID differents, prenant l'exemple de Sonic - DEPOT4 : 17

    j'ai la somme de 17

    si je veux changer la quantité 17 donc 17-2 = 15

    pour

    Sonic - depot1 : 2

    donc la quantité dans depot1 va etre 2 + 2 = 4

    comment je peux faire ça

    car là il me donne la somme c'est ce que je veux mais est ce qu'il va soustraction de n'import quel ID ou bien il va faire quelque chose ?


    Merci d'avance de m'expliquer


    mais pour vous dire je veux prendre 2 articles de meme marchandise (mais pas le meme depots) et les transferes dans le meme article qui se trouve dans autre depot

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 792
    Points : 34 013
    Points
    34 013
    Billets dans le blog
    14
    Par défaut
    Euh... votre message est incompréhensible !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 017
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    vraiment pas clair mais si vous voulez faire des opérations sur votre stock il faudra passer par des UPDATEs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE associationdepotarticle set QTE=QTE-2 WHERE ARTICLE='SONIC' AND DEPOT='DEPOT4';
    UPDATE associationdepotarticle set QTE=QTE+2 WHERE ARTICLE='SONIC' AND DEPOT='depot1';
    et le mieux serait de faire cela dans une procedure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE PROCEDURE TRANSFERT 
    (ARTICLE VARCHAR(10),
      DEPOTSOURCE VARCHAR(10),
      DEPOTCIBLE VARCHAR(10),
      QUANTITE INTEGER)
    AS BEGIN
    UPDATE associationdepotarticle set QTE=QTE-:QUANTITE WHERE ARTICLE=:ARTICLE AND DEPOT=:DEPOTSOURCE;
    UPDATE associationdepotarticle set QTE=QTE+:QUANTITE WHERE ARTICLE=:ARTICLE AND DEPOT=DEPOTCIBLE;
    END;
    ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE PROCEDURE TRANSFERT('SONIC','DEPOT4','depot1',2)
    fera le travail , reste à traiter les erreurs
    1. Dépôt cible ou source inexistant
    2. Quantité dépôt source inférieure à 0
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Citation Envoyé par CLion Voir le message
    j'ai oublie id_article dans GROUP BY ok merci
    Comme dit plus tôt : fonction d'agrégat ou dans le regroupement

    @CinePhil : la somme des prix est assez bizarre oui, c'est pour ça que Sehnsucht s'est monté un exemple avec des quantités (mais allant un peu trop vite il a mis id_ devant, enfin je suppose).

    Pour la dernière demande j'imagine que CLion veut "destocker", dans n'importe quel dépot possédant l'article.

    Amusez vous bien en SQL
    Plus je connais de langages, plus j'aime le C.

  12. #12
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    c'est pour ça que Sehnsucht s'est monté un exemple avec des quantités (mais allant un peu trop vite il a mis id_ devant, enfin je suppose).
    J'ai surtout évité de me prendre la tête en recopiant les données fournies et en leur donnant le même nom que dans la requête montrée ; j'ai pas spécialement cherché à comprendre la "judicieuseté" de la chose
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  13. #13
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 269
    Points
    38 269
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Euh... votre message est incompréhensible !
    Je plussoie avec énergie
    déjà que l'idée de sommer des prix était assez psychédélique, mais là je suis complètement noyé

Discussions similaires

  1. Macro NB.SI ne donne pas le bon résultat
    Par argaz01 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/06/2010, 19h21
  2. Fonction Estnull et Rechdom ne donne pas le bon résultat
    Par Amstra dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 04/01/2010, 15h19
  3. Réponses: 8
    Dernier message: 23/06/2009, 21h31
  4. Requêt avec sum ne donne pas le bon résultat§
    Par _cece dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/11/2008, 19h53
  5. Mon site ne donne pas un bon résultat avec firefox
    Par beegees dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 14/08/2007, 17h46

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