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

Agrupar varias subconsultas

Estas en el tema de Agrupar varias subconsultas en el foro de Mysql en Foros del Web. Estimados, tengo el siguiente problema: Necesito agrupar varias consultas en una sola. tengo 4 consultas de la siguiente estructura: Código: select u.nombre_usuario, count(*) from estados_canales ...
  #1 (permalink)  
Antiguo 24/08/2011, 06:37
 
Fecha de Ingreso: octubre-2009
Mensajes: 39
Antigüedad: 15 años, 2 meses
Puntos: 0
Agrupar varias subconsultas

Estimados, tengo el siguiente problema:

Necesito agrupar varias consultas en una sola. tengo 4 consultas de la siguiente estructura:

Código:
select u.nombre_usuario, count(*) from estados_canales e1, usuarios u where e1.canales_id=3  and e1.fecha_asignacion between '2011-08-01' AND '2011-08-31'  and usuarios_id = usuario_asignado and u.id = e1.usuarios_id group by u.id;
Esta consulta me retorna
Nombre Usuario - Cantidad
analista1 - 2
analista2 - 2

Código:
select u.nombre_usuario, count(*) 
from  usuarios u, historial_solicitudes hs 
where hs.canales_id=3 
and hs.fecha between '2011-08-01' AND '2011-08-31' 
and u.id = hs.usuarios_id
and hs.estados_id=7 
group by u.id;
Esta consulta me retorna vacío

Código:
select u.nombre_usuario, count(*) from estados_canales e1, usuarios u 
where e1.canales_id=3  -- and e1.fecha between '2011-08-01' AND '2011-08-31'  
and e1.estados_id=1 
and u.id = e1.usuarios_id 
group by u.id;
Esta consulta me retorna
Nombre Usuario - Cantidad
analista1 - 2
analista2 - 1

Código:
select u.nombre_usuario, count(*) from estados_canales e1, usuarios u, solicitudes s 
where e1.canales_id=3  -- and e1.fecha between '2011-08-01' AND '2011-08-31'  
and '2011-08-23' > s.dead_line
and s.id = e1.solicitudes_id
and u.id = e1.usuarios_id
and u.roles_id = 3
group by u.id;
Esta consulta me retorna
Nombre Usuario - Cantidad
analista1 - 14
analista2 - 2

Tengo la siguiente agrupación pero me retorna la suma de ambos analistas y los necesito mostrar por separado

Código:
select a.nombre
       ,u.nombre_usuario
       ,(select count(*) from estados_canales e1, usuarios u where e1.canales_id= e.canales_id  and e1.fecha_asignacion between '2011-08-01' AND '2011-08-31'  and usuarios_id = usuario_asignado and u.id = e1.usuarios_id) as 'asignados'
       ,(select count(*) from historial_solicitudes hs where hs.canales_id = e.canales_id and hs.fecha between '2011-08-01' AND '2011-08-31'  and hs.usuarios_id = u.id) as 'Contestados'
       ,(select count(*) from estados_canales e1, usuarios u where e1.estados_id=1 and e1.canales_id=e.canales_id and e1.usuarios_id = u.id) as 'Pendientes'
       ,(select count(*) from estados_canales e1, solicitudes s where s.id = e.solicitudes_id and '2011-08-23' > s.dead_line and e1.canales_id=e.canales_id ) as 'Vencidas'
from estados_canales e
     ,solicitudes s
     ,areas a
     ,usuarios u
WHERE
    s.id = e.solicitudes_id
    and a.id = s.areas_id
    AND u.id = e.usuarios_id
    AND e.canales_id=3
    AND u.roles_id = 3
group by a.id, u.id;
Esta consulta que estoy intentando agrupar me retorna lo siguiente:
Nombre materia - usuario - asignados - contestados - pendientes - vencidas
'Concesion de Beneficios', 'analista1', '4', '32', '3', '17'
'Concesion de Beneficios', 'analista2', '4', '4', '3', '17'
'Recaudación', 'analista1', '4', '32', '3', '17'

Como decía si nos fijamos en la primera columna debería mostarme 2 para analista2 y 2 para analista1, pero me esta retornado 4, lo que corresponde a la primera consulta expuesta aquí.

¿Que estoy haciendo mal?
¿Alguien podría explicarme como agrupar estas consultas en una sola?

Desde ya muchas gracias.

Etiquetas: subconsultas
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 07:27.