Page 1 sur 1

SQL - Mélanger DISTINCT et SUM ??

Posté : 21 janv. 2009, 09:45
par lacfab
Hello,

J'ai actuellement la requete :

Code : Tout sélectionner

SELECT SUM(wt_palissade_stock01) as stock01 FROM WALLTEK_PALISSADE where (wt_palissade_stock01!='' OR wt_palissade_stock01!='0') AND wt_palissade_datepose <= '".$day."' AND wt_palissade_datedepose >= '".$day."' AND wt_palissade_id_poseur='".$stock['wt_stock_id']."'";
seulement le résultat ne me convient pas l'idéal serait que je mette un disctinct par dessus ...
est ce possible de mélanger disctinct et sum ?

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS `WALLTEK_PALISSADE` ( `wt_palissade_id` int(11) NOT NULL auto_increment, `wt_palissade_numdossier` int(6) NOT NULL default '0', `wt_palissade_datepose` date NOT NULL default '0000-00-00', `wt_palissade_datedepose` date NOT NULL default '0000-00-00', `wt_palissade_stock01` varchar(3) NOT NULL default '0', `wt_palissade_id_poseur` varchar(3) NOT NULL, PRIMARY KEY (`wt_palissade_id`) );

Posté : 23 janv. 2009, 11:59
par lacfab
Personne ne peux me venir en aide ? :oops:

Posté : 23 janv. 2009, 12:47
par albat
Peut-être ta question a-t-elle désorienté ses lecteurs...

Par définition, sum() est une fonction d'agrégation qui ne renvoie qu'un résultat : le total calculé.
Il est donc inapproprié de vouloir identifier de manière unique les valeurs parcourues.

Ou je n'ai pas compris ta question...

Posté : 23 janv. 2009, 14:41
par lacfab
en fait j'ai une liste qui se présente comme telle :

A-5
C-2
B-2
A-3
B-1
C-5
C-2

actuellement il m'affiche autant de lignes que de wt_palissade_id ... donc ça ressemble à ça : les totaux sont bons certes mais ...
A-8
C-9
B-3
A-8
B-3
C-9
C-9



alors que moi je veux une ligne par wt_stock_id (voire dans les conditions de ma requête). Voilà ce qu'il me faudrait :
A-8
B-3
C-9
Bon évidement il y a d'autres conditions mais le résultat sera le même ...

Posté : 23 janv. 2009, 16:44
par albat
As-tu regardé du côté de GROUP BY ?...

Posté : 28 janv. 2009, 14:12
par lacfab
Non en fait j'ai résolu le probleme ...
j'ai imbiqué deux while l'un dans l'autre avec deux requêtes ... comme quoi laisser de côté quelques jours ça aide j'ai trouvé en 5 minutes :)

Merci quand même ;)

Posté : 28 janv. 2009, 18:36
par albat
Si tu le souhaites, tu peux montrer ta solution.
Je pense qu'elle doit être optimisable...

:idea: De manière générale, éviter autant que possible les requêtes imbriquées.

Posté : 28 janv. 2009, 18:47
par lacfab
argh oui mais là pas possible LOL car c'est beaucoup plus complexe que l'exemple que j'ai donné ...

en gros j'ai un while qui affiche

TITRE A
TITRE B
TITRE C

et un second while qui affiche (dans un tableau et tout et tout)

A1 A2 A3 A4 A5 A6 ....
B1 B2 B3 B4 B5 B6 ...
C1 C2 C3 C4 C5 C6 ...

A1 (par exemple) est la somme de tous les A1 correspondant à "titre A" à une date donnée, avec d'autres conditions que je vous épargnerai.

J'ai retourné le problème dans tous les sens je n'ai pas le choix que d'imbriquer deux while.

edit : à préciser que le chargement de la page se fait assez rapidement malgré le grand nombre de requêtes.