Ir al contenido


Foto

media geometrica sql


  • Por favor identifícate para responder
9 respuestas en este tema

#1 abraham85

abraham85

    Advanced Member

  • Miembros
  • PipPipPip
  • 128 mensajes

Escrito 19 abril 2010 - 07:56

hola gente como stan???
la media geométrica de una cantidad arbitraria de números (digamos n números) es la raíz n-ésima del producto de todos los números.
Por ejemplo, la media geométrica de 2 y 18 es  =  2 √ (2*18)
Otro ejemplo, la media de 1, 3 y 9 seria =  3√(1*3*9)
otro ejemplo seria    la media de 3,2,4 y 6 = 4√(3*2*4*6)
y asi.....bueno..eso necesito para los campos de una tabla....yo ya se cuantos elementos son
es decir ....ya se los N numeros...asi que ya tengo el N√....ese valor sta almanecenado en otro tabla que no es TCS1



sql
  1. SELECT  SUM(actual), idnegocio
  2. FROM tcs1
  3. WHERE idvariedad= 11110301
  4. AND (actual<>0 OR actual IS NOT NULL)
  5. GROUP BY idnegocio


yo tengo sta funcion que me devuelve la suma de los precios de una variedad para agrupados por negocio
no existe una opcion que se llama MUL en sql? o algo parecido???
se entiende lo que tratao de decirles ? heehhehehehe
o se les ocurre alguna manera de hacerlo en delphi??
Gracias amigos!
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 19 abril 2010 - 08:24

Hola

¿ Lo que quieres es meter la formula que mencionas dentro de una sentencia SQL ?

Salud OS
  • 0

#3 abraham85

abraham85

    Advanced Member

  • Miembros
  • PipPipPip
  • 128 mensajes

Escrito 19 abril 2010 - 08:41

si...quiero meter esa formula en una sentencia sql....
o sino alguna manera de hacer en delphi  :cheesy:
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 19 abril 2010 - 08:48

si...quiero meter esa formula en una sentencia sql....
o sino alguna manera de hacer en delphi  :cheesy:


Pues de poderse todo se puede :D :D :D

De una forma genérica puedes utilizar la función POWER y la raíz se representa como  1 / exponente

Tu tres ejemplos serían algo así:



sql
  1. SELECT ( POWER(2.0*18.0 , 1.0/2.0) ) AS Resultado FROM TuTabla





sql
  1. SELECT ( POWER(1.0*3.0*9.0 , 1.0/3.0) ) AS Resultado FROM TuTabla





sql
  1. SELECT ( POWER(3.0*2.0*4.0*6.0 , 1.0/4.0) ) AS Resultado FROM TuTabla



Salud OS
  • 0

#5 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 20 abril 2010 - 04:17

Hola.

Yo no conozco ninguna función de Agregado SQL que haga la multiplicación de valores (tipo la función SUM con la suma). Así que me parece que no podrás hacerlo en una simple consulta.

¿ Porqué no utilizas un procedimiento almacenado ?

Saludos.
  • 0

#6 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 20 abril 2010 - 06:20

Hola.

Yo no conozco ninguna función de Agregado SQL que haga la multiplicación de valores (tipo la función SUM con la suma). Así que me parece que no podrás hacerlo en una simple consulta.

¿ Porqué no utilizas un procedimiento almacenado ?

Saludos.


Saludos.

En Oracle y SQL Server la función Power esta disponible desde hace mucho tiempo, sin embargo, Firebird la implemento (Built-in) a partir de su versión 2.1; cabe mencionar que la misma estaba en las fbudf, UDF externas.

Creo que como Egostar indica, se puede resolver el problema.
  • 0

#7 abraham85

abraham85

    Advanced Member

  • Miembros
  • PipPipPip
  • 128 mensajes

Escrito 20 abril 2010 - 12:17

bueno gente...aca lo hize a la manera artesenal.....

si alguien despues me puede corregir y ayudar a optimizar el codigo....se lo agradeceria muchosisisisismo



delphi
  1. procedure TFCarga.Button5Click(Sender: TObject);
  2. var
  3. variedad,n:integer;
  4. actual:currency;
  5. negocio:integer;
  6. idnegocio:integer;
  7. multi,totvariedad:currency;
  8. begin
  9.  
  10.  
  11. AQimpu.SQL.Text :=' SELECT idvariedad,idnegocio from tvs1 where procasosval = 1';
  12.         AQimpu.Active:=true;
  13.         While not AQimpu.Eof do
  14.           begin
  15.           multi:=1;
  16.           n:=0;
  17.           variedad := AQimpu.Fields[0].Asinteger;
  18.           negocio  := AQimpu.Fields[1].Asinteger;
  19.           AQimpu2.SQL.Text := 'select actual, idnegocio ' +
  20.                               'from tcs1 '+
  21.                               'where (idvariedad='+ inttostr(variedad)+')'+
  22.                               'and (actual<>0 or actual is not null) '+
  23.                               'and idnegocio = '+inttostr(negocio)+' ';
  24.  
  25.             AQimpu2.Active:=true;
  26.             while not AQimpu2.Eof do
  27.             begin
  28.               actual:= AQimpu2.Fields[0].Ascurrency;
  29.               multi := actual * multi;
  30.               n:=n+1;
  31.               AQimpu2.Next;
  32.             end;
  33.           if n=1 then totvariedad := multi
  34.                   else totvariedad := Power(multi, 1/n)  ;
  35.           AQimpu3.SQL.Text := 'update  tvs1  '+
  36.                                   'set  actual ='+ currtostr(totvariedad) +' '+
  37.                                   'where idvariedad= '+ inttostr(variedad)+' '+
  38.                                   'and  idnegocio= '+inttostr(negocio)+' ';
  39.           AQimpu3.ExecSQL;
  40.           AQimpu.Next;
  41.           end;
  42. AQimpu.Active := False;
  43.  
  44.  
  45. end;




Gracias amigos!
  • 0

#8 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 20 abril 2010 - 01:27

Probaste la opción aportada por egostar??
  • 0

#9 abraham85

abraham85

    Advanced Member

  • Miembros
  • PipPipPip
  • 128 mensajes

Escrito 20 abril 2010 - 01:41

no...pero en parte si .....

porq  los numeros que  necesitaba obtener staban en otra tabla  y dependian de la variedad y negocio....y que no fueran nulas...
los obtengo de un select que hago antes....y despues voy recorriendo la query y almacenando en MULTI el resultado de la multiplicacion.....
de todas maneras ya anda... <:o)......asi q muchas Gracias a todos heheeheheheheeheh


  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 20 abril 2010 - 03:30

Hola abraham85, también tienes la posibilidad de crear tu propia UDF con Delphi y exportarla luego a Firebird.
Otra alternativa, aunque no sabría decir hasta que punto es viable, es la de emplear un SP.

Saludos,

  • 0




IP.Board spam blocked by CleanTalk.