Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/02/2011, 10h18   #1
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 175
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 175
Points : 33
Points : 33
Par défaut GROUP BY et autres colonnes

Bonjour,
Voici ce que je souhaite faire, à partir de la table suivante :
Code :
1
2
3
4
5
6
qte|type|mois|annee
--------------------
5  | 1  |  3 | 2009
10 | 1  |  9 | 2009
12 | 1  |  1 | 2009
6  | 1  |  2 | 2009
Je veux récupérer la somme des quantités (qté) des enregsitrements, groupés par type.
La rêquête suivante fonctionne :
Code :
SELECT sum(qte),type,mois,annee FROM matable GROUP BY type
Mais je souhaite que le mois et l'année qui s'affichent dans le résultat correspondent à la date la plus tardive, soit 9 | 2009, mais je ne sais pas comment faire.
Pouvez-vous m'aider ?
Merci d'avance.
jgfa9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 13h38   #2
Membre éprouvé
 
Avatar de guigo
 
Inscription : juin 2006
Messages : 606
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 606
Points : 479
Points : 479
Salut,
tu peux tenter avec un ORDER BY annee DESC.... Mais vraiment pas sur...
Sinon tu enchaine une autre requete SELECT ...

Guigo
guigo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 14h42   #3
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 175
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 175
Points : 33
Points : 33
Merci pour ta réponse.
Effectivement, le sort seul ne suffit pas ; il faut imbriquer les select, comme tu le suggères :
Code :
1
2
3
4
5
6
SELECT sum(tabletemp.qte),tabletemp.type,tabletemp.mois,tabletemp.annee
FROM
    (SELECT qte,type,mois,annee 
     FROM matable 
     ORDER BY annee DESC, mois DESC) AS tabletemp
GROUP BY tabletemp.type
jgfa9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 14h52   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

Cela serait plus simple avec une colonne de type date, il suffirait de faire un max.
Tu peux eventuellement "reconstruire" une date à partir de ta colonne mois et ta colonne année et prendre le max, mais le resultat sera dans une seule colonne

Sinon, tu peux faire un truc de ce genre :

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
SELECT S.somme, M.mois, A.annee
FROM (
    SELECT type, MAX(annee) AS annee
    FROM matable
    GROUP BY type
) AS A
INNER JOIN (
    SELECT type, annee, MAX(mois) AS Mois
    FROM matable
    GROUP BY type, annee
) AS M ON A.type = M.type AND A.annee = M.annee
INNER JOIN (
    SELECT type, SUM(qte) AS somme
    FROM matable
    GROUP BY type
) AS S ON S.type = A.type

Mais je pense qu'il doit y avoir mieux...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 14h59   #5
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par jgfa9 Voir le message
Merci pour ta réponse.
Effectivement, le sort seul ne suffit pas ; il faut imbriquer les select, comme tu le suggères :
Code :
1
2
3
4
5
6
SELECT sum(tabletemp.qte),tabletemp.type,tabletemp.mois,tabletemp.annee
FROM
    (SELECT qte,type,mois,annee 
     FROM matable 
     ORDER BY annee DESC, mois DESC) AS tabletemp
GROUP BY tabletemp.type
Je n'avais pas vu que tu avais posté une solution entre temps, cela dit, voici un extrait de la doc mysql sur les colonnes selectionées et non spécifiées dans la clause ORDER BY

Citation:
Cela se dit n'import quelle valeur pour ce groupe
[...]
N'utilisez pas cette fonctionnalité si les colonnes que vous omettez dans la clause GROUP BY ne sont pas unique dans le groupe!! Vous auriez des résultats inattendus!
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h07.


 
 
 
 
Partenaires

Hébergement Web