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 :

SUM et group by


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Par défaut SUM et group by
    Bonjour,

    j'ai une db qui me retourne ceci
    Nom : Annotation 2020-03-23 230757.png
Affichages : 390
Taille : 24,4 Ko

    Ce que j'aurais souhaité faire est un select de tout mais que si d'en merge_id il y a un ID identique a d'autre lignes alors je fais la somme de total, surface et moyenne de dose ha.

    auriez vous des pistes?

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 455
    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 455
    Par défaut
    Bonjour,
    Est-ce que veux garder les autres colonnes ?
    Si oui, il faut une sous-requête qui calcule les sommes en regroupant sur l'ID, et dans la requête principale une jointure avec cette sous-requêne.
    Sinon, une simple requête avec des SUM fera l'affaire.
    Par exemple:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select t.IS,t.col1,s.tot1,s.tot2
    from MaTable t
    inner join
    (
    select id,sum(col4),sum(col5)
    from MaTable t group by t.id) s on s.id = t.id
    )
    Evidemment la sous-requête peut très bien taper sur ne autre table.

    Tatayo.
    P.S. MySql permet de ne pas spécifier toutes les colonnes du SELECT qui ne font pas l'objet d'une agrégation (sum,avg,min...) dans la clause GROUP BY, mais c'est une aberration oublier très vite.
    Rien ne garantie quelles valeur vont être envoyées, c'est au petit bonheur la chance.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    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 636
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par tatayo Voir le message
    P.S. MySql permet de ne pas spécifier toutes les colonnes du SELECT qui ne font pas l'objet d'une agrégation (sum,avg,min...) dans la clause GROUP BY, mais c'est une aberration oublier très vite.
    Rien ne garantie quelles valeur vont être envoyées, c'est au petit bonheur la chance.
    mais avec une coquille : Mysql permet de spécifier dans le select des colonnes qui ne font pas l'objet d'une agrégation


    Il existe un paramètre ONLY_FULL_GROUP_BY qui permet de corriger cette aberration, mais avant la version 5.7.5 de Mysql, ce paramètre était inactif, autorisant donc des sélections sans cohérence avec le regroupement

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 455
    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 455
    Par défaut
    escartefigue:
    J'avoue que ma formulation n'était pas forcément très claire.
    En fait j'aurai du tourner ma phrase dans l'autre sens:
    MySql permet de ne pas spécifier dans la clause GROUP BY toutes les colonnes du SELECT qui ne font pas l'objet d'une agrégation (sum,avg,min...).

    En gros tu dis que MySql permet de mettre dans le select des colonnes non agrégées qui ne sont pas dans le group by, et je dis que MySQL n'oblige pas à mettre dans le group by les colonnes du select qui ne sont pas agrégées.
    Mais dans le fond on dit la même chose .

    Et spécial dédicace à celui qui a eut l'idée de faire ça dans MySQL :

    Tatayo.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Par défaut
    Cela supprime les lignes qui on NULL dans la colonne multi_id_traitement_phyto alors que je souhaite les conserver.

    Moi je veux que les null reste comme ça et que celles qui on des id identiques, on les regroupe en une seule et l'on face la somme.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    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 636
    Billets dans le blog
    10
    Par défaut
    Si l'on souhaite conserver les lignes sans correspondance dans la table dérivée, alors il faut remplacer la jointure INNER par une jointure OUTER

Discussions similaires

  1. PB Pourcentage Sur requête avec SUM et GROUP BY
    Par laetus dans le forum Langage SQL
    Réponses: 9
    Dernier message: 11/06/2009, 14h18
  2. SUM et GROUP BY
    Par bubu181 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 10/05/2009, 17h12
  3. SUM, CASE, GROUP BY et sous requête
    Par wisrou dans le forum SQL
    Réponses: 2
    Dernier message: 13/02/2008, 13h19
  4. [SQL] Jointure de table avec SUM et GROUP BY
    Par waterjetmedia dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/09/2007, 13h17
  5. Requête SQL avec UNION, sum et GROUP BY
    Par Guitariff dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/12/2006, 13h48

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