Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Sacar el promedio o media en sql ? (https://www.clubdelphi.com/foros/showthread.php?t=62128)

juangabriel1786 04-12-2008 23:11:37

Sacar el promedio o media en sql ?
 
Hola a todos, estoy realizando un select con MySql 5.0 y delphi 7 , tengo una base de datos con una tabla paciente donde se registra el codigo _ paciente, nombre,apellidos,fecha_creacion,etc, bueno mi problema es que en la base de dato se registran pacientes diario y me gustaria saber como puedo sacar la media(promedio) de paciente que entran diario a la base de datos en una fecha de terminada.

Mi conocimiento me dise que debo hacer un count al codigo_paciente y luego dividir entre las fechas por ejemplo si elijo entre 2008-01-01 y 2008-12-04 y divirlo entre la cantidad de dia que hay entre esas fechas, pero nose como acerlo ?

Lepe 04-12-2008 23:39:35

busca por "sql avg" en google, avg es la función que te hace la media.

No la he usado nunca, por eso no doy más info.

Saludos

TOPX 04-12-2008 23:42:02

Hola,

Con:

Código SQL [-]
SELECT COUNT(*)/DATEDIFF(DATE_ADD('2008-12-04', INTERVAL 1 DAY), '2008-01-01')
FROM paciente
WHERE fecha_creacion BETWEEN '2008-01-01' AND '2008-12-04'

Se obtendría el promedio de pacientes registrados entre 2008-01-01 y 2008-12-04.

FGarcia 04-12-2008 23:43:00

Considerando que de MySQL se lo mismo que de Quimica organica y de delphi se lo mismo que algebra basica esto me ha funcionado con Firebird

Código Delphi [-]
//qyPlot es un query.
//qyPlot.Fields[1].value son los valores que contiene ese indice de campo (p.e. 49.95, 50.0, 49.98, 50.10)
//añade la unidad Math al uses ahi esta declarado MeanAndStdDev
 
procedure TdmDatos.CalculaMediaStdDev;
var
  Numeros: array of double;
  nConta: integer;
  Desviacion,Promedio: extended;
begin
  if qyPlot.recordcount > 0 then
    begin
      setlength(Numeros, qyPlot.RecordCount);
      for nConta := 1 to qyPlot.RecordCount do
        begin
          Numeros[nConta-1] := qyPlot.Fields[1].Value ;
          qyPlot.Next ;
        end;
      //Calculamos el promedio y la desviacion estandard
      MeanAndStdDev(Numeros,Promedio,Desviacion);
      frmVistaPrincipal.ActualizaEstadistica(promedio,desviacion); //aqui actualizo el dato del formulario principal
    end;
end;

Es una idea. Ahora que si tu lo quieres como procedimiento almacenado en tu bd pues......ni como ayudarte. Suerte

juangabriel1786 05-12-2008 00:33:28

Cuando ejecuto el siguiente codigo en un adoquery el valor me sale en 0 y cuando lo ejecuto en un editor de sql como EMS SQL manager me da el valor correcto

Cita:

SELECT COUNT(*)/DATEDIFF(DATE_ADD('2008-12-04', INTERVAL 1 DAY), '2008-01-01')
FROM paciente
WHERE fecha_creacion BETWEEN '2008-01-01' AND '2008-12-04'
y realmente me interesa acerlo en un adoquery, para adaptarlo a mis sitema tuve que hacer lo siguiente
Cita:

select count(*)/datediff(date_add(:n1, interval 1 day), :n2) as Media
from paciente p
where p.fcreacion between :n1 and :n2


La franja horaria es GMT +2. Ahora son las 19:41:43.

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