Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Existe-t-il dans postgresql une fonction d'agrégat permettant de faire un produit des valeurs d'un champ dans une table, un peu de la même manière que Sum permet de faire une somme?
Une fonction du genre: "select prod(champ_nb) from T group by champ_x"
avec comme résultat le produit des valeurs de champ_nb. Exemple
Code :
champ_x | champ_nb
A 2
A 5
A 4
A 3
B 2
B 6
B 2
Résultat:
A 120 (2*5*4*3)
B 24 (2*6*2)
Une solution est possible en passant par l'exponentielle de la somme des logarithmes des enregistrements "exp(sum(ln(x)))". Mais cette opération n'est pas vraiment satisfaisante dans les cas ou certains enregistrements ont une valeur nulle et renvoie donc systématiquement une erreur.
Bien cordialement.
Hors ligne
Cette fonction n'existe pas. Toutefois, écrire une nouvelle fonction d'aggrégat de ce type est trivial.
Je vous redirige sur la doc : http://docs.postgresql.fr/9.0/sql-createaggregate.html
Si vous avez d'autres questions, n'hésitez pas à les poser.
Par ailleurs, calculer des logarithmes et des exposants est une opération assez coûteuse, vous avez donc plutôt intérêt à écrire cette fonction d'aggrégat.
Marc.
Hors ligne
Bonjour à tous,
Une solution m'a été proposé :
CREATE AGGREGATE mmul(int4)
(
sfunc = int4mul,
stype = int4
);
Le problème est que la fonction utilisée n'est opérationnelle que sur des nombres entiers. Existe t'il une fonction similaire permettant l'utilisation de nombres réels?
Hors ligne
Bien sûr :
sfunc = numeric_mul,
stype = numeric
Marc.
Hors ligne
Super tout marche très bien maintenant!
Merci !
Hors ligne
Pages : 1