Group by selon une liste de valeur

Group by selon une liste de valeur - SQL/NoSQL - Programmation

Marsh Posté le 26-08-2009 à 09:48:39    

Bonjour à tous
 
  Je cherche (en MySql) à effectuer un GROUP BY sur un champ mais en imposant la liste de valeur sur lequels je veux effectuer le regroupement.
 
Un truc de ce genre :


  SELECT mois, count(client) FROM tbl_mois GROUP BY mois IN (1,2,3,4,5,6,7,8,9,10,11,12)


(le IN ne fonctionnant bien évidement pas à cette endroit)
 
L'idée n'est pas de restreindre à une liste de valeur, mais au contraire de forcer à avoir dans le résultat toutes les valeurs fournit.
 
La seule solution que j'ai pour l'instant est de crée une table de référence sur laquelle je fait un RIGHT JOIN . Mais pour des requête compliqué, ajouté des jointures n'arrange pas les choses. (de plus dans le cas d'utilisation d'un where il faut crée en plus une sous requete)
 
Des idées pour une solution simple à mon problème ?
 


---------------
Du tofu en Alsace : www.tofuhong.com
Reply

Marsh Posté le 26-08-2009 à 09:48:39   

Reply

Marsh Posté le 26-08-2009 à 12:54:19    

tu peux nous en dire un peu plus (apercu des données de ta table et de ce que tu veux) parce que la c'est pas très clair...
 
normalement

Code :
  1. SELECT mois, count(client) FROM tbl_mois GROUP BY mois

devrait directement te donner le nombre de client par mois...

Reply

Marsh Posté le 26-08-2009 à 15:12:54    

avec plaisir :
 
Soit une table tbl_client :  


mois num_cli
1   25    
1   26    
1   29    
2   32    
2   28    
4   69    


 
La requete " SELECT mois, count(num_client) FROM tbl_client GROUP BY mois "
Va me renvoyer


3   1
2   2
1   4


 
Alors que je souhaiterais


3   1
2   2
0   3
1   4
0   5
0   6
0   7
0   8
0   9
0   10
0   11
0   12


 
La question devient t'elle plus clair ?
 


---------------
Du tofu en Alsace : www.tofuhong.com
Reply

Marsh Posté le 26-08-2009 à 16:06:41    

PierreC a écrit :

La question devient t'elle plus clair ?

 


beaucoup plus! à mon avis la tu n'as pas le choix du coup, tu es obligé de créer une table avec des indices de 1 à 12, et de faire une sous requête ou une jointure...


Message édité par pataluc le 26-08-2009 à 16:06:49
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed