Bonjour,
J'ai une table du type
ID | id_client | valeur
et je souhaiterai obtenir quelquechose du type
ID | id_client | nbre de valeurs entre 1 et 2 | nbre de valeurs entre 3 et 4
Comment puis je faire ceci ?
Merci d'avance.
Version imprimable
Bonjour,
J'ai une table du type
ID | id_client | valeur
et je souhaiterai obtenir quelquechose du type
ID | id_client | nbre de valeurs entre 1 et 2 | nbre de valeurs entre 3 et 4
Comment puis je faire ceci ?
Merci d'avance.
Bonjour,
Avec union :
Bien sur si la version de MySQL accepte les sous-requêtes.Code:
1
2
3
4
5
6
7
8
9 select ID, id_client, sum(val1_2), sum(val3_4) from (select ID, id_client, count(valeur) as val1_2, 0 as val3_4 <div style="margin-left:40px">from MaTable where valeur between 1 and 2 union select ID, id_client, 0 as val1_2, count(valeur) as val3_4 from MaTable where valeur between 3 and 4)</div>group by ID, id_client
En ajoutant des GROUP BY, ça sera plus efficace
Citation:
Envoyé par TheRussian
Merci c'est parfait :)
PS: j'avais entendu dire que le union c'était pas bien et que tout ce qui est fait avec peut etre fait autrement. C'est vrai ou c'est juste une rumeur urbaine ?
En tout cas ici tu peux faire un truc comme :
Code:
1
2
3
4
5
6 SELECT Id, id_client, sum(case when valeur between 1 and 2 then 1 else 0 end), sum(case when valeur between 3 and 4 then 1 else 0 end) FROM MaTable WHERE valeur between 1 and 4 GROUP BY ID, id_client
Et je supose qu'en terme de performances ta proposition est mieux ?¿?
On ne parcours la table qu'une seule fois, alors qu'a priori dans le cas d'une union elle va être parcouru 2 fois...Citation:
Envoyé par Dr_GonZO
Le mieux c'est de tester.