Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/05/2003, 20h01   #1
Invité de passage
 
Inscription : mars 2003
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 3
Points : 1
Points : 1
Par défaut Moyenne des résultats obtenus par une sous requête

Ca fait plusieurs semaines que je me balade sur ce forum et j'apprends des tas de choses. Jusqu'à présent j'ai jamais eu besoin de posté car en faisant des recherches sur le forum je trouvais tout le temps une réponse à mes questions.
Cependant le temps est venu et voilà mon premier post.

En faisant cette requête

SELECT C.Client_ID, SUM(C.Valeur_Total) AS somme
FROM Commande C
Group By C.Client_ID

j'obtiens pour chaque client la somme des valeurs de toutes leurs commandes effectués.

J'aimerais maintenant selectioner tous les clients qui ont effectué des achats dont la valeur totale est supérieur à la moyenne des achats effectué par clients.

Pour calculer la moyenne j'ai essayer plusieurs requêtes mais j'ai toujours un message d'erreur.

Select avg(somme)
from
(SELECT C.Client_ID, SUM(C.Valeur_Total) AS somme
FROM Commande C
Group By C.Client_ID)

J'aimerais donc savoir comment obtenir la moyenne de la colonne somme pour ensuite pour faire quelque chose du genre

SELECT Client_ID
FROM (
(SELECT C.Client_ID, SUM(C.Valeur_Total) AS somme
FROM Commande C
Group By C.Client_ID)
WHERE
somme >= (Select avg(somme)
from
(SELECT C.Client_ID, SUM(C.Valeur_Total) AS somme
FROM Commande C
Group By C.Client_ID))


Comme vous pouvez le voir je suis vraiment perdu et toute aide sera la bienvenue.
Folky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2003, 21h23   #2
Invité de passage
 
Inscription : mars 2003
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 3
Points : 1
Points : 1
Après quelques recherches et tentatives j'ai réussi à résoudre mon problème en créant une vue.

CREATE VIEW TEST (CLient_ID, Total_Achat)
AS
SELECT C.Cliente_ID, SUM(C.Valor_TOTAL)
FROM Commande C
Group By C.Client_ID

Ensuite j'ai juste eu besoin de faire cette requête :

Select Client_ID From TEST
Where Total_Achat >= (Select AVG(Total_Achat)
from TEST)

Et cela fait exactement ce que je voulais.

Cependant j'aimerais toute de même savoir s'il est possible d'obtenir le même résultat sans passer par la création d'une vue.
Folky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2003, 22h41   #3
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
J'arrive un peu tard pour te répondre, tu as en effet trouvé la solution à ton probleme.
On ne peux hélas pas faire de sous select dans le FROM du select comme tu as essayé de le faire avec interbase.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2003, 00h16   #4
Invité de passage
 
Inscription : mars 2003
Messages : 3
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 3
Points : 1
Points : 1
Ok merci tout de même.
C'est quand même dommage que les sous requêtes dans la clause FROM ne soient pas possible avec Interbase.
Peut-être dans une prochaine version qui sait.
Folky est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h28.


 
 
 
 
Partenaires

Hébergement Web