PDA

Ver la Versión Completa : Sacar el promedio o media en sql ?


juangabriel1786
04-12-2008, 22:11:37
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, 22: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, 22:42:02
Hola,

Con:


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, 22: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


//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
04-12-2008, 23: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

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

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