Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Obtener media en una consulta Mysql

Estas en el tema de Obtener media en una consulta Mysql en el foro de Mysql en Foros del Web. Buenas noches, amigos. Tengo esta consulta que me trabaja satisfactoriamente: Código: SELECT fecha,docprovee,proveedor, SUM(IF(codigo <> 'IVA', costo_ent,0)) AS Neto, SUM(IF(codigo = 'IVA',costo_ent,0)) AS Iva, SUM(costo_ent) ...
  #1 (permalink)  
Antiguo 11/06/2012, 20:26
 
Fecha de Ingreso: marzo-2012
Mensajes: 53
Antigüedad: 12 años, 8 meses
Puntos: 3
Obtener media en una consulta Mysql

Buenas noches, amigos.

Tengo esta consulta que me trabaja satisfactoriamente:

Código:
SELECT fecha,docprovee,proveedor, 
SUM(IF(codigo <> 'IVA', costo_ent,0)) AS Neto, SUM(IF(codigo = 'IVA',costo_ent,0)) AS Iva, SUM(costo_ent) AS TotFact
FROM movprodu
  WHERE td='EN' AND tpd='ENT'
  GROUP BY docprovee,codictosal  ORDER BY proveedor,fecha ;


Pero... lo que no he podido lograr es incluir una columna en la consulta que sea el resultado de dividir (Iva/Neto)*100, es decir la media. Lo mas aproximado que he logrado es esto (10 hrs de buscarle):

Código:
SELECT fecha,docprovee,proveedor, 
SUM(IF(codigo <> 'IVA', costo_ent,0)) AS Neto, SUM(IF(codigo = 'IVA',costo_ent,0)) AS Iva, SUM(costo_ent) AS TotFact,
SUM((@IVA/@nETO)*100)  AS tasa
FROM movprodu
  WHERE td='EN' AND tpd='ENT'
  GROUP BY docprovee,codictosal  ORDER BY proveedor,fecha ;
Pero me crea la columna con valores NULL.

¿Pueden ayudarme a conseguirlo?

Código MySQL:
Ver original
  1. MODIFICADO: Perdón, no es la media sino el porcentaje, el resultado que quiero. ¡¡¡UUghrrrr!!!
Muchas gracias, de antemano.

Última edición por falegria230349; 11/06/2012 a las 20:57
  #2 (permalink)  
Antiguo 11/06/2012, 21:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Obtener media en una consulta Mysql

Código MySQL:
Ver original
  1.     fecha,
  2.     docprovee,
  3.     proveedor,
  4.     SUM(IF(codigo <> 'IVA', costo_ent,0)) AS Neto,
  5.     SUM(IF(codigo = 'IVA',costo_ent,0)) AS Iva,
  6.     SUM(costo_ent) AS TotFact,
  7.     SUM((@IVA/@nETO)*100)  AS tasa
  8. FROM movprodu
  9.     td='EN'
  10.     AND tpd='ENT'
  11. GROUP BY docprovee, codictosal  
  12. ORDER BY proveedor, fecha ;
Esto te devuelve valores nulos por dos razones:
1) No se pueden usar los alias de las columnas en el mismo SELECT que las crea.
2) En MySQL Iva y @IVA no son la misma cosa. Uno es el alias que le pones a la columna, y la otra es una variable de usuario. Y como todas las variables de usuario se deben incializar o de lo contrario su valor es NULL, te está devolviendo NULL.

Ahora bien, yendo a tu problema, a mi entender te estás complicando demasiado. Sería mucho más sencillo que hicieras así:

Código MySQL:
Ver original
  1.         fecha,
  2.         docprovee,
  3.         proveedor,
  4.         Neto,
  5.         Iva,
  6.         TotFact,
  7.         SUM((IVA/NETO)*100)  Tasa
  8.     (SELECT
  9.         fecha,
  10.         docprovee,
  11.         proveedor,
  12.         SUM(IF(codigo <> 'IVA', costo_ent,0)) Neto,
  13.         SUM(IF(codigo = 'IVA',costo_ent,0)) Iva,
  14.         SUM(costo_ent) TotFact
  15.     FROM movprodu
  16.     WHERE
  17.         td='EN'
  18.         AND tpd='ENT'
  19.     GROUP BY docprovee, codictosal) T1
  20. ORDER BY proveedor, fecha ;
A veces, lo extenso, simplifica.

Un tip adicional: la cláusula AS es obsoleta. Ya ni siquiera el Oracle 8i la usaba (y va por la versión 12), porque se eliminó del ANSI-SQL hace años. Solamente se conserva por compatibilidad cuando usas motores de bases de datos extremadamente viejos y obsoletos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/06/2012, 22:19
 
Fecha de Ingreso: marzo-2012
Mensajes: 53
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Obtener media en una consulta Mysql

gnzsoloyo, gracias por contestar.

El resultado de la consulta sugerida es este: (solo muestra un item)



Los resultados que busco son estos:

Columna Tasa
14.54
15.00
13.37

Sigo intentándolo. Gracias por tu apoyo.
  #4 (permalink)  
Antiguo 11/06/2012, 22:47
 
Fecha de Ingreso: marzo-2012
Mensajes: 53
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Obtener media en una consulta Mysql

gnzsoloyo... RESUELTO!!!, gracias a tu código.

Código MySQL:
Ver original
  1.             fecha,
  2.            docprovee,
  3.            proveedor,
  4.            Neto,
  5.            Iva,
  6.           TotFact,
  7.           (IVA/NETO)*100  Tasa     //Este es el cambio
  8.     (SELECT
  9.             fecha,
  10.            docprovee,
  11.            proveedor,
  12.            SUM(IF(codigo <> 'IVA', costo_ent,0)) Neto,
  13.            SUM(IF(codigo = 'IVA',costo_ent,0)) Iva,
  14.            SUM(costo_ent) TotFact
  15.       FROM movprodu
  16.       WHERE
  17.           td='EN'
  18.           AND tpd='ENT'
  19.       GROUP BY docprovee, codictosal) T1
  20.      ORDER BY proveedor, fecha ;
Gracias.

Última edición por falegria230349; 11/06/2012 a las 23:44
  #5 (permalink)  
Antiguo 12/06/2012, 03:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Obtener media en una consulta Mysql

Si, lo siento. Lo que pasó es que me olvidé de ese SUM(), que genera un resultado único...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: media, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:56.