Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => 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 (sql) [Seleccionar]

SELECT COUNT( revision ) AS inapropiadas
FROM mensajes
WHERE revision =  "Inapropiado";

SELECT COUNT( mensaje ) AS num_mensajes
FROM mensajes
WHERE mensaje =  "enviado";


saludos!
Título: Re: query con doble count
Publicado por: Usuario Invitado en 29 Enero 2015, 13:45 PM
Código (sql) [Seleccionar]
SELECT COUNT(r.id_revision) AS 'Revisiones inapropiadas',
COUNT(m.id_mensaje) AS 'Mensajes enviados'
FROM Revision r, Mensaje m
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 (sql) [Seleccionar]

SELECT revision AS estado,COUNT( revision ) AS total
  FROM mensajes
WHERE revision =  "Inapropiado"
GROUP BY revision

UNION

SELECT mensaje, COUNT( mensaje )
  FROM mensajes
WHERE mensaje =  "enviado"
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 (sql) [Seleccionar]

SELECT COUNT(IF(mensaje = 'enviado', 1, NULL)) as enviados,
COUNT(IF(revision = 'Inapropiado', 1, NULL)) as inapropiados
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 (sql) [Seleccionar]
select
(select count(rev_state) from revisions where rev_state = 'inapropiado') as 'Mensajes inapropiados',
(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!