|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : février 2005 Messages : 279 ![]() |
Bonjour, existe t-il un moyen de faire un produit genre multiplication(col) De la même manière que la fonction sum(col) fait une addition?
L'idée est que j'ai des taux dans une base, et que je voudrais appliquer plusieurs taux a une donnée. Merci d'avance ! |
|
|
00
|
|
|
#2 | |
|
Membre du Club
![]() |
Citation:
|
|
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
Il n'y a pas l'équivalent de SUM pour la multiplication
mais cela doit pouvoir se régler autrement un peu de précision sur le problème posé ?
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : février 2005 Messages : 279 ![]() |
disons que j'ai une table qui contiens différents taux.
Imagineons que j'ai une table genre Nom du taux : valeur --------------------- 12-25ans : 10% personnes équipées en téléphone : 25% Si je veux avoir les 12-25 ans équipés en téléphone, il faut que je prenne la population * 10 % * 25 % donc population * (10%*25%). Je me demandais donc s'il existait un moyen simple de multiplier ces taux entre eux ou s'il fallait que je fasses moi même le calcul... C'est assez particulier comme application |
|
|
00
|
|
|
#5 | |
|
Membre du Club
![]() |
Citation:
a1*a2*...*an = exp(ln(a1) + ln(a2) + ... + ln(an)) soit : Code :
SELECT EXP(SUM(LN(VALEUR))) FROM LA_TABLE Attention aux débordements, les chiffres deviennent vite très très grands. Ou très très petits. |
|
|
|
00
|
|
|
#6 | |
|
Membre du Club
![]() |
Citation:
DECLARE EXTERNAL FUNCTION ln DOUBLE PRECISION RETURNS DOUBLE PRECISION BY VALUE ENTRY_POINT 'IB_UDF_ln' MODULE_NAME 'ib_udf'; Mais je n'ai pas trouvé d'exponentielle :-( |
|
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#8 | |
|
Membre du Club
![]() |
Citation:
|
|
|
|
00
|
|
|
#9 |
|
Membre habitué
![]() Inscription : février 2005 Messages : 279 ![]() |
Merci a vous c'est cool
|
|
|
00
|
|
|
#10 | |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
Citation:
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
|
00
|
|
|
#11 | |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Citation:
Et les sources sont disponnibles comme l'a précisé makowski. Pour ma part je prendrais l'option de la procédure stoquée afin de me prémunir des problemes d'arrondis que vont engendrer les LN / EXP. |
|
|
|
00
|
|
|
#12 |
|
Membre habitué
![]() Inscription : février 2005 Messages : 279 ![]() |
Bah moi j'ai pris RFunc, car la fonction exp n'étais pas dispo dans la version lite de srfunc, mais je vais peut être récrire la fonction exp, vu que je penses développer une UDF en delphi pendant que j'y suis
|
|
|
00
|
|
|
#13 | |||||
|
Membre du Club
![]() |
Citation:
select mult(taux) from une_table where test in ('12-25 ans', 'possède un téléphone portable'); Le problème c'est qu'il va falloir parser le "IN" depuis un VARCHAR(...) : Code :
Code :
Je crois vraiment que la solution du e(sum(ln(taux))) est la plus efficace. Il n'y a pas de raison qu'il y ait plus de problèmes de débordement avec cette solution (il y en aura même certainement moins puisqu'on peut se contenter de la somme des ln qui est < somme des taux et faire l'exponentielle dans l'application avec (ou pas) des librairies de traitement des grands nombres) qu'avec les procédures stockées. A moins que tu aies une procédure stockée à base de procédures stockées qui marche avec autant de conditions que nek_kro_kvlt a besoin (car il est là le problème, c'est la selection des taux à combiner entre eux)... @+ -- Pierre Y. |
|||||
|
|
00
|
|
|
#14 |
|
Membre habitué
![]() Inscription : février 2005 Messages : 279 ![]() |
Sinon, je ne sait pas trop comment marchent les UDF, mais peut être est-il possible d'appeler une UDF qui traiterait un ensemble de ligne, comme si l'on voulait faire une UDF sum, mais je doute que cela soit possible...
En tous cas merci d'avoir consacré votre temps à mon problème, je vais resté sur la solution ln / e et si j'ai des problèmes je verrai avec les proc stockées, mais normalement il ne devrait pas y avoir de soucis étant donné que la pluspart des taux auront des précision à 10^-2 ou 10^-3 |
|
|
00
|
|
|
#15 | ||
|
Membre du Club
![]() |
Citation:
Citation:
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com