[ACCESS] Problème requête SQL SUM puis MAX

Résolu
Bonjour, j'ai un problème de requête SQL qui a l'air plutôt simple mais je n'arrive pas à la faire...

J'ai seulement une table RDV.
Dans cette table il y a tout plein d'infos mais seulement deux m'intéressent.
Voici la table :

Table : RDV
Champs : idClient, Prix

J'aimerai faire la somme des Prix par client.

Donc ça donne "SELECT idClient, SUM(Prix) FROM RDV GROUP BY idClient;"

Pas de problème ici.

Ensuite j'aimerai récupérer le prix le plus élevé avec le nom du client et là ça se corse.

J'ai essayé :

"SELECT idClient, MAX(Prix) FROM RDV WHERE Prix IN (SELECT idClient, SUM(Prix) FROM RDV GROUP BY idClient);"

Mais ça ne va pas.

En gros ce que j'aimerai faire je vous l'écrit dans une mauvaise syntaxe mais ça aide à comprendre.

"SELECT idClient, MAX(Prix) FROM RDV WHERE MAX(Prix) = (SELECT idClient, SUM(Prix) FROM RDV GROUP BY idClient);"

J'ai même essayé avec plusieurs requêtes mais ce n'est pas mieux...

Quelqu'un a une solution svp ?

Sinon si c'est faisable séparément je suis preneur aussi. Du genre requête qui récupère le prix le plus élevé (ça j'ai réussi) et requête qui récupère le client à qui appartient le plus élevé (je n'y arrive pas)

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. C'est bon, j'ai enfin trouvé.
    Au lieu d'utiliser MAX j'ai rusé :

    SELECT idClient, SUM(Prix) AS MeilleurPrix
    FROM RDV
    GROUP BY idClient
    HAVING SUM(Prix) >= ALL ( SELECT SUM(Prix)
    FROM RDV
    GROUP BY idClient);

    Merci beaucoup pour votre aide ;)

    Problème résolu.
    1. Effectivement, bien joué^^
  2. c'est normal que ca marche pas puisque dans ta requete tu fais
    SELECT idClient, MAX(Prix) FROM RDV WHERE MAX(Prix) = (SELECT idClient, SUM(Prix) FROM RDV GROUP BY idClient);"
    et le max(prixà bien sur ne va pas etre = a id client
    et j'ai pas comprix ou est le probleme est ce que tu veux calculer le max des somems des prix ou justement el maximum des prix

    courage et si t'as besoin d'aide n'hesite pas
    1. Merci pour la réponse rapide.

      Au temps pour moi, je me suis trompé en copiant la requête.
      En fait c'est ça la requête que j'ai essayé :

      "SELECT idClient, MAX(Prix) FROM RDV WHERE Prix IN (SELECT SUM(Prix) FROM RDV GROUP BY idClient);"

      En fait j'aimerai avoir le prix le plus élevé de la somme des prix ainsi que le client.

      Exemple :

      idClient-----------Prix

      Henry-------------20
      Paul---------------40
      Coralie-----------100
      Henry------------100
      Paul---------------10

      Ma requête affichera :

      idClient-----------Prix

      Henry-------------120

      Bon l'idClient est le numéro de client, j'ai mis le nom pour mieux comprendre.

      Merci beaucoup.
      1. Salut,

        D'après moi il faut passer par deux requêtes: la première fait une somme et la deuxième sélectionne la plus élevée
        1. J'ai déjà essayé :

          Requête1 :
          "SELECT SUM(Prix) AS SOMMEPRIX FROM RDV GROUP BY idClient;"

          Requête2 :
          "SELECT MAX(SOMMEPRIX) FROM Requête1;"

          Ça me donne bien le prix le plus élevé mais je ne sais pas comment faire pour avoir l'idClient.

          Si je fais :

          Requête1 :
          "SELECT idClient, SUM(Prix) AS SOMMEPRIX FROM RDV GROUP BY idClient;"

          Requête2 :
          "SELECT idClient, MAX(SOMMEPRIX) FROM Requête1;"

          Ça ne fonctionne pas.
          1. c'est sa ce qu'il fallait faire je suis arrivé en retard car je suis au boulot ^^
            bon courage :d:d:d