Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Como hago un promedio de una columna? (https://www.clubdelphi.com/foros/showthread.php?t=25996)

ANXO 10-10-2005 23:28:55

Como hago un promedio de una columna?
 
Hola a todos, mi problema es el siguiente:

Tengo una tabla conectada a un dbgrid, con 5 columnas.Quiero sumar el valor de todos los campos de una de estas columnas y dividir el resultado por el numero de campos, es decir hacer el PROMEDIO.

Tambien deseo hallar el campo con el valor mas alto de otra columna.

¿Alguien me puede ayudar?

Gracias. Un saludo

vtdeleon 10-10-2005 23:35:18

Saludos

Lo mejor para este caso es usar Sentencias SQL, ya que no es posible(me puedo equivocar) obtener la sumatoria de un campo.
Qué DB usas?
Sabes SQL?

ANXO 10-10-2005 23:56:30

Uso una tabla Paradox, y lamentablemente no tengo ni idea de SQL que ya he visto que la solucion por ahi seria bastante simple.

Pensaba en sumar todos los campos de esa columna, de alguna forma algo arcaica y ...... en fin sacar el promedio asi, pero tampoco me aclaro.

Si usara SQL tendria que volver a empezar de cero con mi programa.

Muchas gracias por contestar. Un saludo.

vtdeleon 11-10-2005 00:19:43

Saludos

De la única forma que veo que se puede hacer es:
Código Delphi [-]
var
  Sum,Prom,Mayor:real;
  Regs:integer;
begin
  Mayor:=0;
  with table1 do begin
    open;
    first;
    while not eof do begin
      Sum:=Sum+FieldByName('campo').AsFloat;
      inc(Regs);
      if mayor'campo').AsFloat then
        Mayor:=FieldByName('campo').AsFloat;
      Next;
    end;
    Prom:=Sum/Regs;
    Close;
  end;
end;
Esto robaría recursos del sistema.
Lo mejor es que busques en Google algun manual(de los miles que hay) e investigue y aprendas la Sentencias
Con SQL
Código SQL [-]
Select (Sum(campo)/count(campo)) as promedio
from tabla
Y solo con esta linea, obtienes el promedio

roman 11-10-2005 00:22:51

Cita:

Empezado por ANXO
Si usara SQL tendria que volver a empezar de cero con mi programa.

Sí pero a fin de cuentas te será más sencillo y eficiente.

1. Coloca una componente TQuery
2. Asigna su propiedad DatabaseName al alias de tu base
3. En su propiedad SQL escribes:

Código SQL [-]
select avg(campo) from tabla

4. Ejecutas la consulta con

Query.Open

5. Tomas el resultado con

Query.Fields[0].AsFloat

Para el valor más alto usas

Código SQL [-]
select max(campo) from tabla

// Saludos

vtdeleon 11-10-2005 00:30:44

Cita:

Empezado por roman
Código SQL [-]
select avg(campo) from tabla

REcorcholes me había olvidado del Avg:(

roman 11-10-2005 00:35:23

Cita:

Empezado por roman
Sí pero a fin de cuentas te será más sencillo y eficiente.

Estaba yo distraído cuando contesté esto. No tienes porque empezar de cero. Todo lo que ya tengas hecho con tablas déjalo como está. Además Paradox es más eficiente con tablas que con querys. Sólo para casos como el que planteas es que agregas un query.

// Saludos

ANXO 11-10-2005 13:26:59

Hola, agregé un query y escribi el codigo que me indicastes, todo bien por esa parte, pensaba que no me daria ningun error, pero me aparece un mensaje de error: " capability not supported", sabeis por que me da ese error?

Un saludo.

vtdeleon 11-10-2005 14:56:54

Saludos

Chequea esta pagina:
http://bdn.borland.com/article/0,1410,25183,00.html

roman 11-10-2005 18:11:09

Cita:

Empezado por ANXO
me aparece un mensaje de error: " capability not supported", sabeis por que me da ese error?

Realmente no lo entiendo. Antes de mandar el otro mensaje probé el código con Paradox y funcionó sin problema. ¿Qué tipo de datos es el campo sobre el que quieres sacar el promedio? ¿Qué versión del BDE tienes?

// Saludos

ANXO 12-10-2005 02:56:08

La consulta la hago sobre un campo calculado de la tabla, y me da ese error.
Sin embargo, cuando realizo la consulta sobre un campo propio de la tabla ( no un oncalcfield) el programa funciona.
Me temo que no puedo realizar una consulta sobre un campo calculado, esto es asi?
Un saludo.


La franja horaria es GMT +2. Ahora son las 10:36:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi