Calcul de la moyenne

mtaallah Messages postés 28 Date d'inscription lundi 10 décembre 2001 Statut Membre Dernière intervention 13 décembre 2006 - 9 nov. 2006 à 19:37
mtaallah Messages postés 28 Date d'inscription lundi 10 décembre 2001 Statut Membre Dernière intervention 13 décembre 2006 - 10 nov. 2006 à 13:05
Salut à tous;
  Je cherche à calculer la moyenne de quatre valeurs dans un DBGrid (connecté à une base de données access via un ADOQuery)...
   Pour expliquer mieux, je dispose les champs suivants
            - Ref
            - Valeur1
            - Valeur2
            - Valeur3
            - Valeur4
            - MoyVal
   Est-ce qu'il existe une commande ou une requête sql qui affecte directement à Moy la moyenne des quatres notes "valeur" en tenant compte bien sur des conditions:
              - Le champs vide ne sera pas tenu comme note
              - Le zéro est une mauviase note à compter
en fait: j'ai essayé avec la manière suivante et ça marche (à conditions):

Procedure TForm1.BitBtn1Click(Sender: TObject);
var
    i,j: Integer;
    TP: real;
begin
     i:=4;
//     TP:=0;
   ADOQuery1.First;
   while not ADOQuery1.Eof do
      Begin
           TP:=0;
           for j:=1 to 4 do
               Begin
                   If ADOQuery1.FieldByName('Valeur'+j).isnull then i:=i-1
                   else TP:= TP + ADOQuery1.FieldByName('Valeur1').asfloat;
                end;
            ADOQuery1.FieldByName('MoyVal').asfloat:= FloatForm('0.000', TP / i);
end;
mais ça a l'air lourd et lent lors de son exécution... je cherche quelque chose de professionnel 
j'ai cherché avec les requeêtes SQL comme AVG et Moyenne mais j'ai trouvé qu'ils donnent le résultat pour la moyenne des champs (c-a-d la moyenne du champs valeur1 pour tous les produits par exemple et non pas la moyenn des valeurs disponibles pour un certain produit)..

Merci

4 réponses

mtaallah Messages postés 28 Date d'inscription lundi 10 décembre 2001 Statut Membre Dernière intervention 13 décembre 2006
9 nov. 2006 à 21:38
une petite faute de frappe
                   else TP:= TP + ADOQuery1.FieldByName('Valeur'+j).asfloat;
Merci
0
mtaallah Messages postés 28 Date d'inscription lundi 10 décembre 2001 Statut Membre Dernière intervention 13 décembre 2006
10 nov. 2006 à 01:22
Encore une fois...
 Voici la procédure qui fonctionne à 100% en donnant les moyenns
  mais, je suis toujours à la recherche d'autres solutions possibles
  si possible bien sûr

Procedure TForm1.BitBtn1Click(Sender: TObject);
var
    i,j: Integer;
    TP: real;
begin
   ADOQuery1.First;
   While not ADOQuery1.Eof do
       Begin
           i:=4;
           TP:=0;
           For j:=1 to 6 do
             Begin
                 If ADOQuery1.FieldByName('Valeur'+inttostr(j)).isnull then i:=i-1
                 else TP:= TP + ADOQuery1.FieldByName('Valeur'+inttostr(j)).asfloat;
             end;
           ADOQuery1.Edit;
           ADOQuery1.FieldByName('MoyVal').value:= FormatFloat('0.00', TP / i);
           ADOQuery1.Next;
       end;
end;

Est-ce que je pourrai tenir ma réponse comme Acceptée!  
0
yvessimon Messages postés 637 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 9 janvier 2017
10 nov. 2006 à 09:45
Bonjour,

Regarde avec une commande SQL

yvessimon
0
mtaallah Messages postés 28 Date d'inscription lundi 10 décembre 2001 Statut Membre Dernière intervention 13 décembre 2006
10 nov. 2006 à 13:05
Salut,
   C'est ce que je dis, je cherche une commande avec SQL...
    J'ai essayé avec la commande AVG mais je n'ai pas pu donner le syntax exact de l'operation... en plus de ça, d'après la documentation fournie avec Access, AVG permet de calculer la moyenne sur un chams complet (sur toute une colonne) et non pas au niveau des lignes.
   Plus précisamment, si j'ai les champs suivants dans la table Produit de ma base de données Access:
             - Ref         // Référence du produit (primary key)
             - Valeur1
             - Valeur2
             - Valeur3
             - Valeur4
             - MoyVal  // Moyenne des 4 valeurs pour chaque produit

   et je veux que le champ MoyVal reçoit la moyenne des quatres champs Valeur1, Valeur2, valeur3 et Valeur4...
    La fonction AVG me permet de calculer la moyenne des Valeur1 pour tous les produits.
   Je ne suis pas sûr, mais c'est ce que j'ai compris d'après mes essais.
Merci
0
Rejoignez-nous