MySQL - MOSTRAR EL RESULTADO DE TRES CONSULTAS EN UNA SOLA TABLA

   
Vista:

MOSTRAR EL RESULTADO DE TRES CONSULTAS EN UNA SOLA TABLA

Publicado por JESUS (3 intervenciones) el 30/03/2017 22:47:50
BUENAS TARDES. RECIÉN COMIENZO A INVOLUCRARME EN LA CUESTION DE LA PROGRAMACIÓN CON PHP Y MYSQL. HAY MUCHAS SENTENCIAS QUE NO CONOZCO Y POR LO TANTO DE ESTA CAUSANDO DOLOR DE CABEZA UNA CONSULTA.

TENGO TRES TABLAS

UNA DE EMPLEADO, CON SU ID_EMPLEADO, NOMBRE, APELLIDO_PAT, APELLIDO_MAT, ID_TIPO DE PLAZA, ID_ADSCRIPCION.

LA SEGUNDA ES DONDE ESTÁN LOS TIPOS DE PLAZA, CON SU IDTIPO_PLAZA, DESCRIPCIÓN. TENGO TRES: SINDICALIZADOS, SUPERNUMERARIOS, Y OPERATIVOS.

Y LA TERCERA DONDE ESTÁN LAS ADSCRIPCIONES CON SU ID_TIPOADSCRPCION. SON 9 ADSCRPCIONES.

NECESITO CONTAR CUANTOS EMPLEADOS PERTENECEN A CADA UNA DE LAS ADSCRIPCIONES, DESGLOSANDO EL TIPO DE PLAZA DE CADA UNO. ASI COMO MUESTRO EN LA IMAGEN ADJUNTA, TOMANDO EN CUENTA TAMBIEN LAS ADSCRIPCIONES DONDE NO HAY EMPLEADOS.

UTILIZANDO ESTA CONSULTA ME MUESTRAN TODOS LOS QUE PERTENECEN A UN TIPO DE PLAZA EN ESPECIFICO, EN ESTE CASO CON EL ID "OP" (OPERATIVO).

select count(empleado.idAdscripcion) from adscripcion LEFT OUTER JOIN empleado ON adscripcion.idAdscripcion=empleado.idAdscripcion AND empleado.idtipo_plaza='OP' GROUP BY adscripcion.idAdscripcion

SI QUITO ESA CONDICIÓN ME MUESTRA EL TOTAL DE CADA ADSCRIPCION AGRUPANDO LOS TIPOS DE PLAZA. ES POSIBLE EN UNA SOLA CONSULTA ME MUESTRE UN RESULTADO COMO EL QUE PUSE EN LA TABLA?


DE ANTEMANO, GRACIAS.
TABLA-EDO-FUERZA
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

MOSTRAR EL RESULTADO DE TRES CONSULTAS EN UNA SOLA TABLA

Publicado por leonardo_josue (307 intervenciones) el 05/04/2017 22:54:00
Hola Jesús:

En estos momentos no tengo instalado un servidor de BD's MySQL para poder hacer pruebas, pero creo que tu problema lo puedes resolver con sumas condicionales, sería más o menos así:

1
2
3
4
5
6
7
8
9
SELECT
  adscripcion.idAdscripcion,
  SUM(CASE WHEN empleado.idtipo_plaza='OP' THEN 1 ELSE 0 END) total_operativos,
  SUM(CASE WHEN empleado.idtipo_plaza='clave para sindicalizados' THEN 1 ELSE 0 END) total_sindicalizados,
  SUM(CASE WHEN empleado.idtipo_plaza='clave para supernumerarios' THEN 1 ELSE 0 END) total_supernumerarios
  SUM(1) total
FROM adscripcion
LEFT OUTER JOIN empleado ON adscripcion.idAdscripcion=empleado.idAdscripcion
GROUP BY adscripcion.idAdscripcion

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

MOSTRAR EL RESULTADO DE TRES CONSULTAS EN UNA SOLA TABLA

Publicado por JESUS (3 intervenciones) el 06/04/2017 15:08:59
Funciona perfecto Leo, tal y como necesitaba, MUCHAS GRACIAS!!. Solo un detalle, cuando aplico el SUM(1) total, me cuenta siempre un registro. Es decir, cuando en las tres adscripciones el numero de elementos es cero, me da como total 1.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

MOSTRAR EL RESULTADO DE TRES CONSULTAS EN UNA SOLA TABLA

Publicado por leonardo_josue (307 intervenciones) el 06/04/2017 15:45:39
Hola de nuevo Jesús;

No había considerado un caso en donde las tres adscripciones pudieran dar cero... en ese caso, en lugar de poner sum(1) deberías colocar algo así:

1
2
SUM(CASE WHEN empleado.idtipo_plaza IN ('OP', 'clave para sindicalizados', 'clave para supernumerarios' )
         THEN 1 ELSE 0 END) total

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

MOSTRAR EL RESULTADO DE TRES CONSULTAS EN UNA SOLA TABLA

Publicado por JESUS (3 intervenciones) el 06/04/2017 16:05:33
SOLUCIONADO!! CON ESO QUEDA. GRACIAS NUEVAMENTE POR TU APOYO LEO. HE APRENDIDO ALGO NUEVO. SALUDOS!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar