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?
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
Contar en MySQL es muy facil:
SELECT COUNT(idregistro) FROM tabla WHERE provincias = ?
y lo mismo para las funciones:
SELECT COUNT(idregistro) FROM tabla WHERE funciones = ?
y para los totales:
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:
SELECT COUNT(idregistro) FROM tabla WHERE funciones = ? AND provincias = ?
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.
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.
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.
Esto es lo que necesitas?.
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
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.
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.
Please heeelllppppp
Es muy facil :)
Solo los de maestro y médico:
SELECT DISTINCT(A.Provincia), B.Maestro, B.Medico 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
FROM tabla1 GROUP BY Provincia
) AS B ON A.Provincia=B.Provincia
Por columnas
SELECT DISTINCT(A.Funcion), B.Valencia, B.Alicante FROM tabla1 AS A
LEFT JOIN (
SELECT Funcion,
COUNT(CASE WHEN Provincia='Valencia' THEN 1 ELSE NULL END) AS Valencia,
COUNT(CASE WHEN Provincia='Alicante' THEN 1 ELSE NULL END) AS Alicante
FROM tabla1 GROUP BY Funcion
) AS B ON A.Funcion=B.Funcion
Añade los demás igual que los dos ejemplos que tienes.
Para hacerlo en php tienes que hacer una consulta (como te dije antes en tu otro mensaje, con mysqli).
Normalmente si buscas un poco en google verás que la mayoria de las preguntas que tienes ya han sido respondidas miles de veces :) http://stackoverflow.com/a/10201105/4067132
Edito: error al copiar y pegar