Consulta MySQL

JuShTo

Buenos días,

Estoy realizando una query para poder trabajar un cuadro de mando estadístico y hay una parte que no se como sacarla sin que el campo sea otra query en sí con la sobrecarga sobre el servidor que ello conlleva.

Basicamente esta query me saca por tipos de zona, las oficinas que hay, con respecto a cada oficina me saca el nº de incidencias para cada tipo de dispositivo.

Es decir:

Direccion general,Oficina,Tipo de dispositivo, etiqueta del dispositivo, nº incidencias/etiqueta
0001,1002,ORDENADOR,ORD1234,5 INCIDENCIAS
0001,1002,ORDENADOR,ORD3333,2 INCIDENCIAS
0001,1002,ORDENADOR,ORD2222,1 INCIDENCIAS
0001,1002,TECLADO,TECYYYY,2 INCIDENCIAS
0001,1002,TECLADO,TECXXXX,4 INCIDENCIAS
0001,1002,PANTALLA,PAN0000,1 INCIDENCIAS

Select 
	d.dt as 'Direccion Territorial',
	t.centro as 'Oficina',
	nombrelargo,
	if(length(p.Oficina)=3,concat('0',p.Oficina),p.Oficina) as 'Oficina2',
	p.Tipo_Disp as 'Dispositivo',
	count(p.Tipo_Disp) as 'Nº de partes/Etiqueta',
	p.Etq_Amarilla as 'Etiqueta',
	------------   count(TOTAL INC DE ESE DISPOSITIVO) ---------------------------,
        ------------   count(TOTAL INC DE ESA OFICINA) ---------------------------
	
from textcentro t,dtdz d,ppp p
	where 
		t.jcentro03=d.dt and
		t.organizativo='OFIC./AGEN./DELEG.' and
		t.situacion='ABIERTO' and
		t.sociedad='0900' and
		(p.Estado != "Abierto" and p.Estado!= 'Planificado') and
		(month(p.Fecha_y_hora_de_creacion) = 8 and year(Fecha_y_hora_de_creacion)=2013) and
		t.centro=if(length(p.Oficina)=3,concat('0',p.Oficina),p.Oficina)
		
	GROUP BY d.dt,t.centro,p.Tipo_Disp,p.Etq_Amarilla

La agrupación va así:
1 - d.dt ----> Direccion de zona geografica(entendido como un codigo postal por ejemplo)
2 - t.centro ----> Código de la oficina/sucursal
3 - p.Tipo_Disp ----> Tipo de dispositivo
4 - d.Etq_Amarilla ----> Identificador único de cada dispositivo

Las tablas son estas :
textcentro t,dtdz d,ppp p
1- textcentro ----> Datos específicos de los centros
2- dtdz ----> tabla auxiliar para encontrar la direccion territorial de cada centro
3- ppp ----> Tabla donde se encuentran todas las incidencias

Pues bien, ahora quiero que me sume el nº total de incidencias por tipo de dispositivo, quedando así:

Direccion general,Oficina,Tipo de dispositivo, etiqueta del dispositivo, nº incidencias/etiqueta,nº Incidencias/dispositivo,TOTAL DE INCIDENCIAS/oficina

0001,1002,ORDENADOR,ORD1234,5 INCIDENCIAS,8 INC,15
0001,1002,ORDENADOR,ORD3333,2 INCIDENCIAS,8 INC,15
0001,1002,ORDENADOR,ORD2222,1 INCIDENCIAS,8 INC,15
0001,1002,TECLADO,TECYYYY,2 INCIDENCIAS,6 INC,15
0001,1002,TECLADO,TECXXXX,4 INCIDENCIAS,6 INC,15
0001,1002,PANTALLA,PAN0000,1 INCIDENCIAS,1 INC,15

Estoy probando con sums y counts y nada, no hay manera de sacar las otras dos cifras. Creo que metiendo una select como si fuera un campo me lo devolvería igualando las claves, pero claro, la carga para el procedimiento sería muchiiiiiisimo mayor.

El ejemplo sería éste... pero ni siquiera he conseguido que termine de ejecutarla y va por los 12--13 minutos ya

Select 
        d.dt as 'Direccion Territorial',
        t.centro as 'Oficina',
        nombrelargo,
        if(length(p.Oficina)=3,concat('0',p.Oficina),p.Oficina) as 'Oficina2',
        p.Tipo_Disp as 'Dispositivo',
        count(p.Tipo_Disp) as 'Nº de partes/Etiqueta',
        p.Etq_Amarilla as 'Etiqueta',
        (Select count(*) from People_DB pp where pp.Oficina=p.Oficina and pp.Tipo_Disp=Dispositivo and (month(pp.Fecha_y_hora_de_creacion) = 8 and year(pp.Fecha_y_hora_de_creacion)=2013) and (pp.Estado != "Abierto" and pp.Estado!= 'Planificado') )
        
from textcentro t,dtdz d,ppp p where t.jcentro03=d.dt and t.organizativo='OFIC./AGEN./DELEG.' and t.situacion='ABIERTO' and t.sociedad='0900' and (p.Estado != "Abierto" and p.Estado!= 'Planificado') and (month(p.Fecha_y_hora_de_creacion) = 8 and year(Fecha_y_hora_de_creacion)=2013) and t.centro=if(length(p.Oficina)=3,concat('0',p.Oficina),p.Oficina)
GROUP BY d.dt,t.centro,p.Tipo_Disp,p.Etq_Amarilla
djtonight

en la tabla pone tal cual "5 INCIDENCIAS" en la ultima columna?? No podrías poner solo el número y tener ese campo como int?

1 respuesta
JuShTo

#2

Lo puse asi para que fuera mas grafico, serían todos INTS claro xD. Ese en concreto que si que lo saco correctamente lo es.

El caso es que no lo consigo con counts y sum debido al group by o yo que se qué.

Kiroushi

Deberías limpiar un poco el código, personalmente lo encuentro tan ilegible que me marea poner a analizarlo.

Usuarios habituales

  • Kiroushi
  • JuShTo
  • djtonight