(he omitido los campos que no son necesarios para mi pregunta)
Quisiera hacer un algoritmo de asignación automática, de forma que pueda obtener con una consulta SQL la suma de la media del "tiempoempleado" en resolver las incidencias que con el siguiente filtro:
* resueltatecnico='N'
* tiempoempleado is not null
* tiempoempleado <> 0
Lo que quiero sacar es algo así:
[Código Usuario] ----- [Nombre usuario] ----- [Número total incidencias] ---- [Suma del tiempo medio empleado en resolver las incidencias de la subcategoría de las incidencias no resueltas]
Consigo hacer esto:
Código:
select s.nombre Subcategoría, avg(i.tiempoempleado) "Tiempo medio"
from incidencia i, subcategoria s
where i.codigosubcategoria = s.codigo and tiempoempleado is not null and tiempoempleado<>0
group by i.codigosubcategoria
Que me muestra para cada subcategoría el tiempo medio empleado en resolverla.
Y esta otra:
Código:
select ii.codigotecnico Codigo_Tecnico, uu.nombre Usuario, count(*) Numero_Total,
sum(ii.tiempoempleado)
from incidencia ii, usuario uu
where ii.codigotecnico = uu.codigo and ii.resueltatecnico = 'N'
group by ii.codigotecnico
Pero no me sirve porque me muestra el tiempo total empleado de las tareas no resueltas y estas no tienen tiempo total.
Publicado:
Jue May 07, 2009 9:14 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Consulta SQL compleja de totales y medias
Anuncios
varios escribió:
Estoy desarrollando una aplicación para controlar las tareas de mi departamento. Tengo la siguiente tabla:
(he omitido los campos que no son necesarios para mi pregunta)
Quisiera hacer un algoritmo de asignación automática, de forma que pueda obtener con una consulta SQL la suma de la media del "tiempoempleado" en resolver las incidencias que con el siguiente filtro:
* resueltatecnico='N'
* tiempoempleado is not null
* tiempoempleado <> 0
Lo que quiero sacar es algo así:
[Código Usuario] ----- [Nombre usuario] ----- [Número total incidencias] ---- [Suma del tiempo medio empleado en resolver las incidencias de la subcategoría de las incidencias no resueltas]
Consigo hacer esto:
Código:
select s.nombre Subcategoría, avg(i.tiempoempleado) "Tiempo medio"
from incidencia i, subcategoria s
where i.codigosubcategoria = s.codigo and tiempoempleado is not null and tiempoempleado<>0
group by i.codigosubcategoria
Que me muestra para cada subcategoría el tiempo medio empleado en resolverla.
Y esta otra:
Código:
select ii.codigotecnico Codigo_Tecnico, uu.nombre Usuario, count(*) Numero_Total,
sum(ii.tiempoempleado)
from incidencia ii, usuario uu
where ii.codigotecnico = uu.codigo and ii.resueltatecnico = 'N'
group by ii.codigotecnico
Pero no me sirve porque me muestra el tiempo total empleado de las tareas no resueltas y estas no tienen tiempo total.
Para lo que nos comentas, si lo hemos entendido bien, tendrás que utilizar subconsultas, sería algo así:
Código:
select ii.codigotecnico Codigo_Tecnico, uu.nombre Usuario, count(*) Numero_Total,
sum((select avg(i.tiempoempleado)
from incidencia i
where tiempoempleado is not null and tiempoempleado <> 0
and i.codigosubcategoria = ii.codigosubcategoria
group by i.codigosubcategoria)) Tiempo_Total
from incidencia ii, usuario uu
where ii.codigotecnico = uu.codigo and ii.resueltatecnico = 'N'
group by ii.codigotecnico
order by Tiempo_Total asc, Numero_Total asc
Que te mostrará el código del técnico, el nombre del técnico, el número total de tareas pendientes de resolver, la suma de la media del tiempo empleado en "resolver" las tareas que tiene sin resolver y ordena el listado poniendo en primer lugar el técnico que mayor tiempo tiene.
Publicado:
Jue May 07, 2009 9:18 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Consulta SQL compleja de totales y medias
Anuncios
Como ves hemos puesto en el propio select otra subconsulta que sólo puede devolver un registro si no daría error (lógicamente), para ello hemos hecho el:
i.codigosubcategoria = ii.codigosubcategoria
De esta forma cogemos el valor actual del campo ii.codigosubcategoria de la consulta principal.
Como ves, MySQL (también válido para Oracle, SQL Server, etc.) permite multitud de combinaciones en las consultas SQL para hacer casi de todo con una única consulta SQL.
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A