Tabla de doble entrada

Iniciado por bgnumis, 16 Noviembre 2015, 08:57 AM

0 Miembros y 1 Visitante están viendo este tema.

bgnumis

Hola a todos,

Tengo una tabla que tiene PRovincias, Funciones, Fecha, idregistro.

Me gustaría hacer una tabla donde no sólo le marque por GROUP BY por filas sino también por columnas, de campos diferentes utilizando COUNT ¿Esto podría ser? ¿Como se haría?

Por ejemplo sería en la Filas agrupar por provincias y en las columnas por funciones (utilizando el COUNT) ¿Cómo se habría una tabla así, si es que se puede?


bgnumis

Hola he leido pero no acabo de ver como que se puede utilizar PIVOT pero no veo como.

Tabla1

Valencia Maestro 12
Valencia Medico 4
Alicante Enfermera 6
Alicante Cocinera 2
Valencia Enfermera 8
Alicante Maestro 2
Valencia Maestro 4



Resultado
            Maestro Medico Enfermera Cocinera Total
Valencia  2       1            1           0            4
Alicante   1       0              1          1             3
Total       2       1             2            1            7

Por ejemplo yo tengo una tabla Tabla1 que tiene las provincias y funciones y quiero que me cuente cuantos idregistro hay por filas  serian las provincias y por columnas las funciones. ¿Como se añadiría una fila de totales tanto por columnas como por filas?

A ver si me podeis ayudar habia planteado fatal la pregunta

gAb1

Contar en MySQL es muy facil:

Código (sql) [Seleccionar]
SELECT COUNT(idregistro) FROM tabla WHERE provincias = ?

y lo mismo para las funciones:

Código (sql) [Seleccionar]
SELECT COUNT(idregistro) FROM tabla WHERE funciones = ?

y para los totales:

Código (sql) [Seleccionar]
SELECT COUNT(idregistro) FROM tabla

Simplemente añade la condición WHERE y AND para la segunda condición, por ejemplo si quieres contar cuantos maestros hay en valencia:

Código (sql) [Seleccionar]
SELECT COUNT(idregistro) FROM tabla WHERE funciones = ? AND provincias = ?

bgnumis

Hola muchas Gracias,

Lo de contar lo tengo claro. Lo único que quiero tengo duda es cómo hacer una tabla que por filas me agrupe por PRovincias y por columnas por Funciones, sin tener que definirlas (se que debiera implicar group by y count que para que me lo saque por filas sé hacerlo, la dificultad es que me agrupe además también por columnas por "funciones". Este es el ejemplo de lo que quiero, tampoco sabría como sacarlo con echo? en php

Tabla1

Valencia Maestro 12
Valencia Medico 4
Alicante Enfermera 6
Alicante Cocinera 2
Valencia Enfermera 8
Alicante Maestro 2
Valencia Maestro 4



Resultado
            Maestro Medico Enfermera Cocinera Total
Valencia  2       1            1           0            4
Alicante   1       0              1          1             3
Total       2       1             2            1            7


A ver si me puedes ayudar.

0roch1

El número delante de la función qué significa?
CitarValencia Maestro 12

Coloca un ejemplo claro, todos los campos que tienes en la tabla, el resultado que esperas con valores reales.

bgnumis

Hola el ejemplo más claro es este, el número es un id, conteo idregistro porque sé que nunca será nulo:

Tabla1 (sus campos son: Provincia, Función, idregistro)

Valencia Maestro 12
Valencia Medico 4
Alicante Enfermera 6
Alicante Cocinera 2
Valencia Enfermera 8
Alicante Maestro 2
Valencia Maestro 4



Resultado
            Maestro Medico Enfermera Cocinera Total
Valencia  2       1            1           0            4
Alicante   1       0              1          1             3
Total       2       1             2            1            7


El tema sería utilizando GROUP BY y count que me sacara el conteo por filas provincias, por columnas las funciones.

Espero haberme expresado mejor.

Muchas Gracias por adelantado.

0roch1

Esto es lo que necesitas?.

Código (sql) [Seleccionar]

SELECT DISTINCT(A.Provincia), B.Maestro, B.Medico, B.Total FROM Tabla1 AS A
LEFT JOIN (
SELECT Provincia,
COUNT(CASE WHEN Funcion='Maestro' THEN 1 ELSE NULL END) AS Maestro,
COUNT(CASE WHEN Funcion='Medico' THEN 1 ELSE NULL END) AS Medico,
COUNT(*) AS Total
FROM Tabla1 GROUP BY Provincia
) AS B ON A.Provincia=B.Provincia

bgnumis

Esto sí  creo que me vale cuando llegue a casa lo pruebo pero me obliga a saber todos los posibles valores de PRovincia y Función. Yo quería que el solo lo obtuviese, que es lo que hace GROUP BY, pero no sólo por filas sino también por columnnas. Muchas Gracias.  Aunque pensándolo también quizá valga hacer un distinct por funciones, le pegaré una vuelta.

bgnumis

Me vale, tengo dos dudas:

Me saca los totales de todo ¿Cómo podría decir que me saque sólo los de maestro y médico?

Me saca los totales por filas, ¿Cómo pedirle por columnas?

¿Ejecuto la sentencia en phpmyadmin y me sale una tabla. ¿Cómo podría mostrar en php esa tabla con php? ¿Con echo?

A ver si me puedes ayudar.

bgnumis