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

problemas con consulta mysql(count y sum)

Estas en el tema de problemas con consulta mysql(count y sum) en el foro de Mysql en Foros del Web. Hola, este es el segundo post ;D bien estoy tratando resolver el siguiente ejercicio: Mostrar el resumen de los programas instalados indicando cuantos de ellos ...
  #1 (permalink)  
Antiguo 29/11/2009, 16:46
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
problemas con consulta mysql(count y sum)

Hola, este es el segundo post ;D bien estoy tratando resolver el siguiente ejercicio:

Mostrar el resumen de los programas instalados indicando cuantos de ellos tienen licencia.
mostrara: COdProgama || Descripcion || #Pc's Q lo tienen || # Pc's con licencia.

He hecho la siguiente consulta:
Cita:
select P.CodigoPrograma,P.Descripcion as Programa,count(EC.CodigoEquipoComputo) as 'PCS',
count(PI.FlagTieneLicencia) as 'Pcs con licencia'
from EquipoComputo as EC, ProgramasInstalados as PI, Programas as p
where (EC.CodigoEquipoComputo=PI.CodigoEquipoComputo) and (PI.CodigoPrograma=P.CodigoPrograma)
and (PI.FlagTieneLicencia=1)
group by P.Descripcion;
Pero lo que pasa es que el # de pcs que lo tienen es igual que # de pcs con licencia, y eso no debe ser.

Entonces pense puse en vez cambie el count en count(EC.CodigoEquipoComputo) por SUM y me sale demasiadas sumas mas que el numero de pcs que existe.

Adjunto el backup de mi base con la que estoy trabajando. http: //ww w. megaupload.com/?d=IEBG0D1U

PD: no intento hacer spam pero toda la url es junta
  #2 (permalink)  
Antiguo 29/11/2009, 17: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: 16 años, 5 meses
Puntos: 2658
Respuesta: problemas con consulta mysql(count y sum)

El error de la cuenta es simple: En el WHERE estabas diciendo que solamente te mostrara los que tenían licencia... y eso asía.
Además de ello, si bien no es un error exactamente, la relación entre tablas no debe hacerse en el WEHRE porque no es optimizable. Se hace en el FROM a través de JOINS con la cláusula ON:
Código sql:
Ver original
  1. SELECT
  2.   P.CodigoPrograma,
  3.   P.Descripcion Programa,
  4.   COUNT(EC.CodigoEquipoComputo) 'PCS',
  5.   COUNT(PI.FlagTieneLicencia) 'Pcs con licencia'
  6. FROM
  7.   EquipoComputo EC
  8.   INNER JOIN ProgramasInstalados PI ON EC.CodigoEquipoComputo=PI.CodigoEquipoComputo
  9.   INNER JOIN Programas p ON  PI.CodigoPrograma=P.CodigoPrograma
  10. GROUP BY P.Descripcion;
Por otro lado, la consulta tal y como la planteas te devolverá cuántas PC tienen instalado el programa con y sin licencia, pero no te discriminará cuáles son las PCs.
__________________
¿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 29/11/2009, 18:12
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: problemas con consulta mysql(count y sum)

gracias por responder, no lo entiendo mucho al inner join todabia.. y no sabia que las relaciones se hacian en el from.

Bueno el error esta en esto: COUNT(PI.FlagTieneLicencia) 'Pcs con licencia' debe ser
SUM(PI.FlagTieneLicencia) 'Pcs con licencia' y ahi si muestra correctamente.

Me tarde en entender pero al poner count lo que se hace es contar indiscrimidanadamente sin hacer caso a la sentencia PI.FlagTieneLicencia=1 o eso es lo que creo.
Con el sum muestra lo adecuado.
  #4 (permalink)  
Antiguo 29/11/2009, 18:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: problemas con consulta mysql(count y sum)

Correcto. No me fijé con mucho cuidado, pero el caso era ese.
Por lo demás, si ponías PI.FlagTieneLicencia=1, no aparecían los de valor cero (0), por lo que tampoco obtenías el resultado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 29/11/2009, 23:32
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: problemas con consulta mysql(count y sum)

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Correcto. No me fijé con mucho cuidado, pero el caso era ese.
Por lo demás, si ponías PI.FlagTieneLicencia=1, no aparecían los de valor cero (0), por lo que tampoco obtenías el resultado.
hay algo que me olvide, para que funcione el sum lo que se tenia es que borrar el
PI.FlagTieneLicencia=1, entonces es logico porque como los que tienen licencia su numero es 1 se suman todos los unos mas no los ceros.

Esta es la consulta final:
Código:
select P.CodigoPrograma,P.Descripcion as Programa,count(EC.CodigoEquipoComputo) as 'PCS',
       sum(PI.FlagTieneLicencia) as 'Pcs con licencia'
from EquipoComputo as EC, ProgramasInstalados as PI, Programas as p
where (EC.CodigoEquipoComputo=PI.CodigoEquipoComputo) and (PI.CodigoPrograma=P.CodigoPrograma)
group by P.Descripcion;
pero si los que tienen licencia seran 2 y los que no 1 ahi no funciona... buscare una solucion mas versatil.
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 23:59.