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

Varias Group by

Estas en el tema de Varias Group by en el foro de Mysql en Foros del Web. Hola tengo una tabla equipos que tiene los siguiente campos IdEquipo||NombreEquipo||Operativo||NoOperativo 1 ; A ; Si ; null 2 ; B ; Si ; null ...
  #1 (permalink)  
Antiguo 18/06/2011, 17:23
cym
 
Fecha de Ingreso: marzo-2011
Mensajes: 46
Antigüedad: 13 años, 1 mes
Puntos: 0
Pregunta Varias Group by

Hola tengo una tabla equipos que tiene los siguiente campos
IdEquipo||NombreEquipo||Operativo||NoOperativo
1 ; A ; Si ; null
2 ; B ; Si ; null
3 ; B ; null ; Si
4 ; A ; null ; Si
5 ; A ; Si ; null
6 ; C ; Si ; null

Quiero hacer una consulta que me tire la cantidad de equipos que hay, en este ejemplo sería
NombreEquipo || Cantidad |
A ; 3
B ; 2
C ; 1
esta consulta la tengo hecha,
Código MySQL:
Ver original
  1. SELECT NombreEquipo,COUNT(*) as Cantidad
  2. FROM equipos
  3. GROUP BY NombreEquipo
pero quiero que salgan otro 2 campos que me digan cuantos están Operativos y cuantos NoOperativos. Quisiera tener el siguiente resultado
______________________________________________
NombreEquipo || Cantidad || Operativos || NoOperativos |
A ; 3 ; 2 ; 1
B ; 2 ; 1 ; 1
C ; 1 ; 1 ; 0

La verdad que no se como se puede realizar, si se puede hacer varios Group by o con inner joins. Espero que alguien me pueda ayudar!!
MUCHAS GRACIAS!!!
  #2 (permalink)  
Antiguo 19/06/2011, 12:05
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 12 años, 10 meses
Puntos: 42
Información Respuesta: Varias Group by

Hola cym,

Una opción es:
Código SQL:
Ver original
  1. SELECT
  2.     e.NombreEquipo,
  3.     COUNT(e.IdEquipo) AS Cantidad,
  4.     COUNT(eo.IdEquipo) AS Operativo,
  5.     COUNT(eno.IdEquipo) AS NoOperativo
  6. FROM equipos e
  7.     LEFT JOIN equipos eo ON e.IdEquipo = eo.IdEquipo AND eo.Operativo = 'Si'
  8.     LEFT JOIN equipos eno ON e.IdEquipo = eno.IdEquipo AND eno.NoOperativo = 'Si'
  9. GROUP BY e.NombreEquipo;
  #3 (permalink)  
Antiguo 20/06/2011, 07:49
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Varias Group by

Hola cym:

Creo que no hay necesidad de hacer los LEFT JOIN'S como propone wchiquito, sería algo más simple, más o menos así:

Código MySQL:
Ver original
  1. select NombreEquipo,
  2. sum(if(Operativo = 'Si' or NoOperativo = 'Si', 1, 0)) Cantidad,
  3. sum(if(Operativo = 'Si', 1, 0)) Operativos,
  4. sum(if(NoOperativo = 'Si', 1, 0)) NoOperativos
  5. from equipos
  6. group by NombreEquipo

Haz la prueba y nos comentas.

Saludos
Leo.
  #4 (permalink)  
Antiguo 20/06/2011, 08:55
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 12 años, 10 meses
Puntos: 42
Mensaje Respuesta: Varias Group by

Hola leonardo_josue,

Tu opción también es válida. Como indiqué mi solución es "una opción", seguro hay otras opciones válidas. Gracias por tu aporte.

Última edición por wchiquito; 20/06/2011 a las 09:04
  #5 (permalink)  
Antiguo 20/06/2011, 09:08
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Varias Group by

Hola wchiquito:

Alguna vez escuché que alguien decía "hay muchas formas de matar a una hormiga, pero usar una bomba puede resultar demasiado"...

En mi post nunca digo que tu consulta no funcione, ni tampoco digo que la consulta que propongo sea la mejor de todas, mi comentario tenía la intención de mostrar que se podía obtener el mismo resultado con una consulta menos compleja, a final de cuentas tal como dices en tu post, simplemente es otra opción que cym puede utilizar para resolver su problema.

Saludos
Leo.
  #6 (permalink)  
Antiguo 22/06/2011, 17:28
cym
 
Fecha de Ingreso: marzo-2011
Mensajes: 46
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Varias Group by

MUCHÍSIMAS GRACIAS wchiquito Y leonardo_josue ambas consultas funcionan perfecto.
Ahora mi duda es...con Inner Joins la consulta supuestamente no sería más lenta al tener muchos registros???
Muchas gracias de nuevo!!! me dieron una mano enorme!!!

Etiquetas: group
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:10.