Sous requete pour calculer le maximum d'une somme

ViPHP
ViPHP | 1996 Messages

24 déc. 2007, 16:38

Bonjour,

Je débute en sous requète et là je coince. J'essaye d'avoir le maximum des sommes calculé via :

Code : Tout sélectionner

SELECT SUM(`PrixTotal`) AS CoutTransport FROM `base_essai` GROUP BY `CodeDestinataire`
Cela marche très bien mais pour trouver le maximum j'ai essayé :

Code : Tout sélectionner

SELECT MAX(CoutTransport) AS cout FROM (SELECT SUM(`PrixTotal`) AS CoutTransport FROM `base_essai` GROUP BY `CodeDestinataire`)
Qui m'indique une erreur après le #1064 - You have an error in your SQL syntax near 'SELECT SUM( `PrixTotal` ) AS CoutTransport FROM `base_essai` GROUP BY `Cod' at line 1

La le gars y sais pas... :oops:
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Mammouth du PHP | 1511 Messages

24 déc. 2007, 16:53

Tu as deux fois FROM dans ta requête ;)
Mais la n'est pas l'erreur a mon avis ;)
Poste nous le schéma de ta ou tes tables et dis nous ce que tu veux vraiment faire et après on pourra t'aider :)
@++

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

24 déc. 2007, 16:53

Quelle est ton SGBD et quelle est sa version (c'est incroyable comme même un message indiqué en gras lors d'un nouveau post peut être illisible :shock:)
Tu as deux fois FROM dans ta requête ;)
C'est normal, il y a la requête et la sous-requête ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 1996 Messages

24 déc. 2007, 17:03

Quelle est ton SGBD et quelle est sa version (c'est incroyable comme même un message indiqué en gras lors d'un nouveau post peut être illisible :shock:)
Pourquoi dis tu en gras ? J'ai pas écris en gras ? Du moins je crois ...

La version de Mysql est la 3.23.47. En format MyIsam. Sinon la structure de la table est (une partie, je vous épargne le reste) :

NumeroColis varchar(14) Primary
ReferenceExpedition varchar(250)
NomDestinataire varchar(250)
(...)

CodeDestinataire varchar(10)
Regional char(2)
PrixTransport varchar(10)
...

EDIT : J'ai oublié le plus important. Désolé.

PrixTransport varchar(10)
PrixTaxes varchar(10)
PrixTotal varchar(10)
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

24 déc. 2007, 17:29

Quand tu as posté ton message, tu as eu le rappel suivant qui s'est affiché
Rappel pratique - n'oubliez pas de :
  1. suivre ces quelques conseils de débogage
  2. préciser quel SGBD vous utilisez ainsi que sa version
  3. utiliser les balises

    Code : Tout sélectionner

    [/i] et [i]
    [/i] pour afficher vos requêtes SQL
  4. poster le schéma des tables pertinentes à votre requête sous la forme d'une instruction "CREATE TABLE" (fonction "Exporter" de phpMyAdmin)
  5. si nécessaire, poster un échantillon des données
Attention, suivre ces consignes est obligatoire. Merci de les lire attentivement.
Donc ... oui, c'est invisible comme rappel :evil:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

24 déc. 2007, 17:30

Sinon, MySQL n'accepte les sous-requête qu'a partir de la version 4.1 :?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 1996 Messages

24 déc. 2007, 17:42

Ok je m'incline...
C'est vrai que le message était apparu :oops:

Sinon As tu une autre piste ? Ou dois je faire le tri du tableau sous PHP ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

24 déc. 2007, 18:26

Dans ton cas particulier, tu n'as pas besoin de passer par une sous-requête.
Tu cherches a récupérer le maximum d'une liste de résultat, on est d'accord ?
Le group by te retourne une liste de résultats, vrai ?

Normalement,

Code : Tout sélectionner

SELECT MAX(SUM(PrixTotal)) FROM base_essai GROUP BY CodeDestinataire
devrait fonctionner ... a tester :-k

Il existe aussi une autre solution : ordonner tes résultats du plus grand au plus petit et ne récupérer qu'un résultat

Code : Tout sélectionner

SELECT SUM(PrixTotal) AS total FROM base_essai GROUP BY CodeDestinataire ORDER BY total DESC LIMIT 1
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 1996 Messages

28 déc. 2007, 11:40

Merci Zeus,

Je pense avoir déjà essayé le premier mais je vais vérifier de suite les deux. Je te tiens à l'éclair... (Zeus = dieu + éclair = courant i.e je te tiens au courant - ouais je sais elle est nulle)


EDIT :
la première retourne une erreur mysql diant qu'on ne peut pas mettre ce genre de double syntaxe (max et sum en même temps)

La seconde fonctionne nickel et en plus je viens de comprendre encore un truc! (LIMIT 1 et AS : je n'ai pas l'habitude des les employés c'est deux là mais ils sont vraiment pratiques)
Merci encore.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr