FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ayuda con Sentencia SQL con Mysql
Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Ayuda con Sentencia SQL con Mysql
Posted: Fri Mar 13, 2015 04:34 PM
Saludos Al Forum.
Tengo esta sentencia Sql, como puede sacar un promedio de los 12 meses lo hago de esta manera pero no me sirve , porque quiero que el promedio solamente lo divida sobre el Numero de meses donde hay valores
Ejemplos
(12,56,13,0,45,0,56,0,0,0,0,12) Daria este valor si lo divido entre 12 Daria este valor de 16.16
Pero el valor correcto seria asi 32.33 es decir lo divide sobre 6 donde hay ceros no se tendrian en cuenta.


(A0.PRE1+A0.PRE2+A0.PRE3+A0.PRE4+A0.PRE5+A0.PRE6+A0.PRE7+A0.PRE8+A0.PRE9+A0.PRE10+A0.PRE11+A0.PRE12)/12



Code (fw): Select all Collapse
SELECT A0.PLANTA,A0.CODPROD,A0.VERPROD,A0.ANO,A0.PRE1,A0.PRE2,
(A0.PRE1+A0.PRE2+A0.PRE3+A0.PRE4+A0.PRE5+A0.PRE6+A0.PRE7+A0.PRE8+A0.PRE9+A0.PRE10+A0.PRE11+A0.PRE12) AS PRE13,
(A0.PRE1+A0.PRE2+A0.PRE3+A0.PRE4+A0.PRE5+A0.PRE6+A0.PRE7+A0.PRE8+A0.PRE9+A0.PRE10+A0.PRE11+A0.PRE12)/12 AS PRE14,
FROM presdata AS A0
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Ayuda con Sentencia SQL con Mysql
Posted: Sat Mar 14, 2015 02:39 PM

Intenta con select anidado, donde en el 2do select uses un count con un where o un if de los registros donde el valor sea mayor a cero, lo pasas a una VAR y luego divides tu monto entre esa VAR...nose si captas la idea...saludos... :shock:

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Ayuda con Sentencia SQL con Mysql
Posted: Sat Mar 14, 2015 08:02 PM
Code (fw): Select all Collapse
( PRE1 + PRE2 + PRE3 + PRE4 + PRE5 + PRE6 + PRE7 + PRE8 + PRE9 + PRE10 + PRE11 + PRE12 ) / 
( LEAST( 1, PRE1 ) + LEAST( 1, PRE2 ) + LEAST( 1, PRE3 ) + LEAST( 1, PRE4 ) + LEAST( 1, PRE5 ) + 
LEAST( 1, PRE6 ) + LEAST( 1, PRE7 ) + LEAST( 1, PRE8 ) + LEAST( 1, PRE9 ) + 
LEAST( 1, PRE10 ) + LEAST( 1, PRE11 ) + LEAST( 1, PRE12 ) )
Regards



G. N. Rao.

Hyderabad, India
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Ayuda con Sentencia SQL con Mysql
Posted: Sat Mar 14, 2015 08:28 PM

Grandioso ejemplo Mr. Nages.
Lo paso a formar parte de mi fichero de ejemplos MySql. Desconocia LEAST
Muchas gracias.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Re: Ayuda con Sentencia SQL con Mysql
Posted: Sat Mar 14, 2015 11:39 PM

Saludos.

Gracias Mr. Nages,
Funciono desconocia esta funcion lo que hacia.
Tengo una Duda , que pasaria si el valor de la base de datos fuera Negativa, No tamaria 1 si no el Valor Negativo, Hay seria un problema , no se si estoy equivocado en mi apreciacion.

Gracias

Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Re: Ayuda con Sentencia SQL con Mysql
Posted: Sat Mar 14, 2015 11:41 PM
joseluisysturiz wrote:Intenta con select anidado, donde en el 2do select uses un count con un where o un if de los registros donde el valor sea mayor a cero, lo pasas a una VAR y luego divides tu monto entre esa VAR...nose si captas la idea...saludos... :-)


Gracias Por tu Respuesta,
Jose Luis , y tienes un ejemplo de lo que tu dices, me gustaria ver el codigo como se hace . con esta funciona LEAST me funciono.



Gracias
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Ayuda con Sentencia SQL con Mysql
Posted: Sat Mar 14, 2015 11:43 PM

Aunque esta buena la idea del LEAST, si hay muchos registros seria una consulta descomunal, cuando combinando COUNT/IF/WHERE, tomaria todos los registros que cumplan dicha condicion dada, entre gustos y colores...saludos... :shock:

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Ayuda con Sentencia SQL con Mysql
Posted: Sat Mar 14, 2015 11:48 PM
ruben Dario wrote:
joseluisysturiz wrote:Intenta con select anidado, donde en el 2do select uses un count con un where o un if de los registros donde el valor sea mayor a cero, lo pasas a una VAR y luego divides tu monto entre esa VAR...nose si captas la idea...saludos... :-)


Gracias Por tu Respuesta,
Jose Luis , y tienes un ejemplo de lo que tu dices, me gustaria ver el codigo como se hace . con esta funciona LEAST me funciono.



Gracias


Ruben, si no tienes que validar mas nada, como lo puso NAGES es una muy buena manera, tampoco conocia la funcion, creo hay qye echarle una repasadita a las nuevas de mysql, saludos...
Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Ayuda con Sentencia SQL con Mysql
Posted: Sun Mar 15, 2015 01:52 AM
Saludos

Siguiendo la idea de rao y joseluis podrias tener algo asi

Code (fw): Select all Collapse
( PRE1 + PRE2 + PRE3 + PRE4 + PRE5 + PRE6 + PRE7 + PRE8 + PRE9 + PRE10 + PRE11 + PRE12 ) / 
( IF( PRE1 != 0, 1, 0 ) + IF( PRE2 != 0, 1, 0 ) + IF( PRE3 != 0, 1, 0 ) + IF( PRE4 != 0, 1, 0 ) + IF( PRE5 != 0, 1, 0 ) + 
IF( PRE6 != 0, 1, 0 ) + IF( PRE7 != 0, 1, 0 ) + IF( PRE8 != 0, 1, 0 ) + IF( PRE9 != 0, 1, 0 ) + 
IF( PRE10 != 0, 1, 0 ) + IF( PRE11 != 0, 1, 0 ) + IF( PRE12 != 0, 1, 0 ) )
Posts: 492
Joined: Wed Nov 16, 2005 12:03 PM
Re: Ayuda con Sentencia SQL con Mysql
Posted: Sun Mar 15, 2015 08:24 AM
ruben Dario wrote:Saludos Al Forum.
Tengo esta sentencia Sql, como puede sacar un promedio de los 12 meses lo hago de esta manera pero no me sirve , porque quiero que el promedio solamente lo divida sobre el Numero de meses donde hay valores
Ejemplos
(12,56,13,0,45,0,56,0,0,0,0,12) Daria este valor si lo divido entre 12 Daria este valor de 16.16
Pero el valor correcto seria asi 32.33 es decir lo divide sobre 6 donde hay ceros no se tendrian en cuenta.


(A0.PRE1+A0.PRE2+A0.PRE3+A0.PRE4+A0.PRE5+A0.PRE6+A0.PRE7+A0.PRE8+A0.PRE9+A0.PRE10+A0.PRE11+A0.PRE12)/12



Code (fw): Select all Collapse
SELECT A0.PLANTA,A0.CODPROD,A0.VERPROD,A0.ANO,A0.PRE1,A0.PRE2,
(A0.PRE1+A0.PRE2+A0.PRE3+A0.PRE4+A0.PRE5+A0.PRE6+A0.PRE7+A0.PRE8+A0.PRE9+A0.PRE10+A0.PRE11+A0.PRE12) AS PRE13,
(A0.PRE1+A0.PRE2+A0.PRE3+A0.PRE4+A0.PRE5+A0.PRE6+A0.PRE7+A0.PRE8+A0.PRE9+A0.PRE10+A0.PRE11+A0.PRE12)/12 AS PRE14,
FROM presdata AS A0


Ruben
En mi experiencia de diseño de base de datos no utilizo tablas con valores acumulados (esto lo hacia con clipper)
Busco el origen de las transacciones y aplico una vista, sum(), AVERAGE() sobre las transaciones y genero resultados confiables.

para realizar un promedio ponderado
podras obtener el valor /12 por / 12 poderado mediante la funcion IF( de MySQL ejemplo:

(A0.PRE1+A0.PRE2+A0.PRE3+A0.PRE4+A0.PRE5+A0.PRE6+A0.PRE7+A0.PRE8+A0.PRE9+A0.PRE10+A0.PRE11+A0.PRE12) / (IF(PRE_01>0,1,0)+IF(PRE_02>0,1,0)+IF(PRE_03>0,1,0))
Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Re: Ayuda con Sentencia SQL con Mysql
Posted: Sun Mar 15, 2015 12:13 PM
jnavas wrote:
ruben Dario wrote:Saludos Al Forum.
Tengo esta sentencia Sql, como puede sacar un promedio de los 12 meses lo hago de esta manera pero no me sirve , porque quiero que el promedio solamente lo divida sobre el Numero de meses donde hay valores
Ejemplos
(12,56,13,0,45,0,56,0,0,0,0,12) Daria este valor si lo divido entre 12 Daria este valor de 16.16
Pero el valor correcto seria asi 32.33 es decir lo divide sobre 6 donde hay ceros no se tendrian en cuenta.


(A0.PRE1+A0.PRE2+A0.PRE3+A0.PRE4+A0.PRE5+A0.PRE6+A0.PRE7+A0.PRE8+A0.PRE9+A0.PRE10+A0.PRE11+A0.PRE12)/12



Code (fw): Select all Collapse
SELECT A0.PLANTA,A0.CODPROD,A0.VERPROD,A0.ANO,A0.PRE1,A0.PRE2,
(A0.PRE1+A0.PRE2+A0.PRE3+A0.PRE4+A0.PRE5+A0.PRE6+A0.PRE7+A0.PRE8+A0.PRE9+A0.PRE10+A0.PRE11+A0.PRE12) AS PRE13,
(A0.PRE1+A0.PRE2+A0.PRE3+A0.PRE4+A0.PRE5+A0.PRE6+A0.PRE7+A0.PRE8+A0.PRE9+A0.PRE10+A0.PRE11+A0.PRE12)/12 AS PRE14,
FROM presdata AS A0


Ruben
En mi experiencia de diseño de base de datos no utilizo tablas con valores acumulados (esto lo hacia con clipper)
Busco el origen de las transacciones y aplico una vista, sum(), AVERAGE() sobre las transaciones y genero resultados confiables.

para realizar un promedio ponderado
podras obtener el valor /12 por / 12 poderado mediante la funcion IF( de MySQL ejemplo:

(A0.PRE1+A0.PRE2+A0.PRE3+A0.PRE4+A0.PRE5+A0.PRE6+A0.PRE7+A0.PRE8+A0.PRE9+A0.PRE10+A0.PRE11+A0.PRE12) / (IF(PRE_01>0,1,0)+IF(PRE_02>0,1,0)+IF(PRE_03>0,1,0))



Gracias por tu respuesta,
Entamos de Acuerdo , solamente lo requiero para generar consultas o reportes
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com

Continue the discussion