Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: basickdagger en 28 Enero 2015, 23:01 pm



Título: query con doble count
Publicado por: basickdagger en 28 Enero 2015, 23:01 pm
hola tengo una tabla con dos campos distintos, por ejemplo:

RevisionMensaje
Pendienteenviado
Pendienteenviado
Inapropiado enviado
Inapropiado enviado
Pendienteenviado
Inapropiado enviado
Respondidoproceso

deseo contar los mensajes  inapropiados y contar los mensajes enviados, pero en una misma consulta.


Código
  1. SELECT COUNT( revision ) AS inapropiadas
  2. FROM mensajes
  3. WHERE revision =  "Inapropiado";
  4.  
  5. SELECT COUNT( mensaje ) AS num_mensajes
  6. FROM mensajes
  7. WHERE mensaje =  "enviado";
  8.  

saludos!


Título: Re: query con doble count
Publicado por: Usuario Invitado en 29 Enero 2015, 13:45 pm
Código
  1. SELECT COUNT(r.id_revision) AS 'Revisiones inapropiadas',
  2. COUNT(m.id_mensaje) AS 'Mensajes enviados'
  3. FROM Revision r, Mensaje m
  4. WHERE r.revision = 'Inapropiado' AND m.mensaje = 'enviado';


Título: Re: query con doble count
Publicado por: HdM en 29 Enero 2015, 16:20 pm
Sólo hay una tabla...

Si he entendido bien, podría quedar así:

Código
  1. SELECT revision AS estado,COUNT( revision ) AS total
  2.  FROM mensajes
  3. WHERE revision =  "Inapropiado"
  4. GROUP BY revision
  5.  
  6. UNION
  7.  
  8. SELECT mensaje, COUNT( mensaje )
  9.  FROM mensajes
  10. WHERE mensaje =  "enviado"
  11. GROUP BY mensaje

Saludos.


Título: Re: query con doble count
Publicado por: MinusFour en 29 Enero 2015, 17:03 pm
Tambien lo deberias poder hacer asi:

Código
  1. SELECT COUNT(IF(mensaje = 'enviado', 1, NULL)) AS enviados,
  2. COUNT(IF(revision = 'Inapropiado', 1, NULL)) AS inapropiados
  3. FROM mensajes

Aunque puede ser un poco mas lento que las otras queries, dependiendo de la estructura de tu base de datos.


Título: Re: query con doble count
Publicado por: Usuario Invitado en 29 Enero 2015, 17:08 pm
Leí mal xD. Teniendo en cuenta tu tabla, lo haría con unas subconsultas sencillas:

Código
  1. SELECT
  2. (SELECT COUNT(rev_state) FROM revisions WHERE rev_state = 'inapropiado') AS 'Mensajes inapropiados',
  3. (SELECT COUNT(message_state) FROM revisions WHERE message_state = 'enviado') AS 'Mensajes enviados'

Salida:

(http://i.imgur.com/UKzDxPM.png)


Título: Re: query con doble count
Publicado por: basickdagger en 31 Enero 2015, 00:20 am
Excelente me funcionó a la perfección Gus Garsaky, pero estoy seguro q necesito leer mas sobre subconsultas e UNION... :xD

gracias por sus respuestas...

Saludos!