Page 1 sur 1

Sous requete pour calculer le maximum d'une somme

Posté : 24 déc. 2007, 16:38
par Aureusms
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:

Posté : 24 déc. 2007, 16:53
par momox
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 :)
@++

Posté : 24 déc. 2007, 16:53
par zeus
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 ;)

Posté : 24 déc. 2007, 17:03
par Aureusms
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)

Posté : 24 déc. 2007, 17:29
par zeus
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:

Posté : 24 déc. 2007, 17:30
par zeus
Sinon, MySQL n'accepte les sous-requête qu'a partir de la version 4.1 :?

Posté : 24 déc. 2007, 17:42
par Aureusms
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 ?

Re: Sous requete pour calculer le maximum d'une somme

Posté : 24 déc. 2007, 18:26
par zeus
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

Posté : 28 déc. 2007, 11:40
par Aureusms
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.