Page 1 sur 1

group by, count, et condition

Posté : 06 avr. 2009, 12:01
par pierreC
hello,

Encore un titre bien pourrit pour une requete bien tordu :-)

un exemple valant mieux qu'un long discours voici l'exemple

id_client , titre
35 , ABO
42 , CPT
42 , ABO
56 ,
56 , CPT
78 , VPC
qui doit donnée le resultat
id_client , titre
35 , ABO
42 , MLT
56 , CPT
78 , VPC
Algo :
Regroupement sur id_client, si un client à plusieurs titre, alors titre vaut MLT (comme multi) sinon vaut la valeur du titre.

L'algo est simple, mais pour le traduire en SQL :roll:


Une idée ?

Merci

Posté : 06 avr. 2009, 12:25
par Ryle
A mon avis, tu auras plus vite fait de faire une requête simple et de traiter le résultat ensuite avec ton code.... Parce que rajouter des case/when dans ta requête pour savoir si un id_client est présent plusieurs fois et avec une valeur unique ou null, ou alors présent avec plusieurs valeurs distincte et dans ce cas renseigner par "MLT" ... si toutefois tu y arrives, ça va sérieusement alourdir ton traitement pour pas grand chose :)

Posté : 06 avr. 2009, 13:15
par pierreC
Quand mon analyse arrive au même résultat qu'un modo php, ca me rassure assez dans mes choix technique :lol:

je vais peut-etre etre modo un jour 8-)


Donc sql + php en réponse à ce problème ca m'ira très bien.

Posté : 06 avr. 2009, 15:17
par narcisse
et avec un

Code : Tout sélectionner

SELECT MAX(ID_CLIENT), DISTINCT(NOM_CLIENT) FROM CLIENTS GROUP BY ID_CLIENT, NOM_CLIENT;
Ca fonctionne pas ?

Posté : 06 avr. 2009, 17:05
par Ryle
Ce n'est pas la même chose :)

Dans ta requête, tu vas chercher l'id max pour chaque client. Cela va te retourner les infos suivantes :

Code : Tout sélectionner

ABO , 42 CPT , 56 VPC , 78 , 56
(à noter d'ailleurs que "id_client" ne devrait pas figurer dans ton GROUP BY, puisque ta colonne est déja aggrégée par le max() :))

Il te manque ici les notions :
- "s'il y a plusieurs clients différents et non null pour un même id, je spécifies la valeur 'MLT'
- "s'il y a plusieurs clients mais un seul non null, j'utilises le non null
Qui vont être particulièrement galère à implémenter en sql dans la mesure où il faut jongler avec des tests de quantité et de définition, alors qu'une boucle php produira le même résultat en quelques lignes et sans prise de tête ;)