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 :

MAX d'une somme groupée par ID


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 61
    Points : 52
    Points
    52
    Par défaut MAX d'une somme groupée par ID
    Bonjour a tous,

    J'ai une table a qui contient les 4 colonnes suivantes bibliotheque_id, livre_id, date, quantite

    Ce dont j'ai besoin c'est de sommer les quantite par bibliotheque et par date et ensuite de recuperer le maximum(quantite) par bibliotheque en affichant la date a laquelle le max a ete atteind.

    Jusque la j'ai reussi a recuperer ces donnees mais quand je veux prendre le max, cela me retourne que la premiere date et pas la date a laquelle ce maximum de page a ete atteind.

    Voila ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    create temporary table TotalSommeLivre as (
    select  bibliotheque_id,livre_id, date, sum(quantite)  as 'SommeQt'
    from referentiellivre rf
    and year(date)=2017 
    group by bibliotheque_id, date );
     
    select bibliotheque_id, date , max(SommeQt) from TotalSommeLivre
    group by bibliotheque_id;
    Ce code me retourne les bon bibliotheque_id mais pas les bonnes dates associees. Si vous pourriez m'aider ou je fais l'erreur ?

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    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 088
    Points : 38 384
    Points
    38 384
    Billets dans le blog
    9
    Par défaut
    La requête que vous avez mentionnée est erronée : il manque le mot clef WHERE et le groupage est incohérent avec le SELECT, MyQL autorise cette incohérence SELECT/GROUP BY mais ça n'a pas de sens fonctionnellement et ça ne respecte pas la norme.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 61
    Points : 52
    Points
    52
    Par défaut
    Oups j'ai oublie le WHERE en recopiant.

    Comment devrais-je grouper les donnees afin que cela ait un sens fonctionnellement et respecte la norme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    create temporary table TotalSommeLivre as (
    select  bibliotheque_id,livre_id, date, sum(quantite)  as 'SommeQt'
    from referentiellivre 
    where year(date)=2017 
    group by bibliotheque_id, date );

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    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 088
    Points : 38 384
    Points
    38 384
    Billets dans le blog
    9
    Par défaut
    Les colonnes citées dans le SELECT (hors valeurs agrégées MAX, MIN, SUM, AVG etc...) doivent être les mêmes que celles du GROUP BY

    Par exemple, ceci est correct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COL1, COL2, max(COL3), min(COL4) 
    from MATABLE
    GROUP BY COL1, COL2
    Alors que ceci ne n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COL1, max(COL3), min(COL4) 
    from MATABLE
    GROUP BY COL1, COL2
    Ceci non plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COL1, COL2, max(COL3), min(COL4) 
    from MATABLE
    GROUP BY COL1

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 61
    Points : 52
    Points
    52
    Par défaut
    Merci beaucoup, je ne savais pas cela.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    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 088
    Points : 38 384
    Points
    38 384
    Billets dans le blog
    9
    Par défaut
    Pour votre besoin, ça devrait donner quelque chose comme ça (sous réserve de fautes de frappe, je n'ai pas créé les tables pour tester) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Select t0.bibliotheque_id  AS ID_BIB
         , t1.dte              AS DATE_MAX, 
         , sum(T0.quantite)    AS QTE 
    from referentiellivre as T0
    inner join (select bibliotheque_id
                     , max(`date`)
                from referentiellivre
                group by bibliotheque_id) as T1
       on t1.bibliotheque_id = t0.bibliotheque_id              
    where year(`T0`.`date`)=2017 
    group by t0.bibliotheque_id
           , t1.dte

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/03/2014, 17h19
  2. Réponses: 3
    Dernier message: 09/08/2013, 09h19
  3. Requete de mise a jour avec une somme defini par critere
    Par kinof dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 18/07/2013, 21h06
  4. Requête DateTime sur une semaine groupée par jour et par heure
    Par cerealkiller dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/08/2011, 16h54
  5. [XSLT] max d'une somme?
    Par Raimse dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 15/04/2008, 11h29

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