Calculer une moyenne table base

Bonsoir,
Je n’ arrive pas à calculer une moyenne suivant un certain nombre d’ enregistrement. Par exemple:
Clé Désignation Qts Prix
1----Poire----------2----2€
2----Pomme-------5----1.5 €
3----Banane-------4----1 €
4----Poire----------10—1.4 €
De cet exemple, il ressort que la moyenne de chaque produit sera de:
Poire 1.50 €
Pomme 1.50 €
Banane 1 €
Je n’ arrive pas à mettre au point une requête qui me donnerai ce résultat.
Pourriez-vous m’ aiguiller?
Cordialement

Bonjour ElCatala,

Remarque : dans l’exemple que vous citez il n’y a guère que les enregistrements (1 & 4) “Poire” pour lesquels on puisse calculer une moyenne

Essayez en utilisant la fonction BDMOYENNE ou BDLIRE (quand l’item est unique) dans le module Calc :

BDMOYENNE calcule la moyenne des valeurs numériques dans les cellules (champs) de la colonne spécifiée, pour toutes les lignes (enregistrements de base de données) qui correspondent aux critères de recherche spécifiés. Les valeurs non numériques dans ces cellules sont ignorées.

Renvoie une erreur #DIV/0! si aucun enregistrement ne correspond aux critères de recherche spécifiés, ou s’il n’y a pas de valeurs numériques dans les cellules de la colonne spécifiée pour les enregistrements correspondants.

Syntaxe

BDMOYENNE(base_de_données;champ_base_de_données;critère_de_recherche)

Dans le module Base :

Fonctions d’agrégation ( Google translate )

Base/HSQLFunctions en anglais

Les fonctions d’agrégat sont utilisées pour effectuer des calculs par rapport à un groupe de valeurs. Chaque champ d’une table peut être considéré comme un groupe de valeurs. L’utilisation de la clause GROUP BY dans une instruction select permet la création de plusieurs groupes de valeurs.

Nom de la fonction Concepteur Échap Proc Commentaires
COUNT( Any * ) YES YES Renvoie le nombre d’entrées non nulles dans une colonne ou lorsqu’il est utilisé avec * le nombre d’enregistrements.
MIN(d) OUI OUI Renvoie la plus petite valeur d’un groupe.
MAX(d) OUI OUI Renvoie la plus grande valeur d’un groupe.
SUM(d) OUI OUI Additionne toutes les valeurs d’un groupe.
AVG(d) OUI OUI Renvoie la moyenne du groupe de valeurs.
SOME(b) NON NON Renvoie VRAI si une valeur dans un groupe = VRAI
EVERY(b) YES YES Renvoie VRAI uniquement si toutes les valeurs d’un groupe = VRAI

:wink:

1 Like

Bonjour,
Merci pour votre aide. Le tableau que j’ ai présenté en exemple est simplifié par rapport à l’ utilisation future. Dans les faits, il pourra y avoir d’ autre cas. Par exemple une clé du même produit pourra être présente au de la de deux fois.
Il faut aussi avoir à l’ esprit que je parle d’ une table de LO Base. Cette table est utilisé pour alimenté un état . Le but étant d’ automatiser cette opération.
Dans l’ esprit, j’ envisage une solution basée sur une macro.
1: Comptage des enregistrements.
2: Repérage des clés en double
3: Si pas de doublons, la moyenne sera le tarif de base.
4: Si x doublons, totalisations des montants tarif par quantités et par doublons
5: Somme des quantités et des montants .
6: Calcul de la moyenne (Total montants/Total quantités).
Comme on dit, y a plus qu’ a traduire cela dans une macro.
Cordialement

Bonsoir,
Depuis ma dernière intervention, je n’ ai guère progressé. Je bute toujours sur la visualisation des doublons afin de pouvoir réaliser cette moyenne. En reprenant l’ exemple cité dans mon premier message, je souhaite arriver au résultat suivant:
((22)+(101.4))/12
Je pense à une macro basé sur Array, mais je n’ arrive pas à trouver des explications pour l’ utiliser dans une macro.
Quelqu’ un aurait-il déjà utilisé cette fonction?
Cordialement

Bonjour @ElCatala

Pas besoin de macro pour cela :

  • une première requête pour grouper, multiplier
  • une seconde, fondée sur la première pour diviser

moyenne.odb (4,4 Ko)

Cordialement

Merci beaucoup de votre aide, je n’ avais pas du tout pensé aux requêtes et m’ obstinais dans la voie des macros. Le problème est donc résolu grâce à votre intervention.
Bonne soirée et encore merci.