Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta SQL para generar una tabla con resultados autosumados

Estas en el tema de Consulta SQL para generar una tabla con resultados autosumados en el foro de Mysql en Foros del Web. Bueno, quizá el título no sea del todo explícito, intentaré explicarme un poco mejor. Tengo una estructura de tablas más o menos así Actuaciones - ...
  #1 (permalink)  
Antiguo 08/07/2016, 02:06
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 18 años, 7 meses
Puntos: 2
Consulta SQL para generar una tabla con resultados autosumados

Bueno, quizá el título no sea del todo explícito, intentaré explicarme un poco mejor.
Tengo una estructura de tablas más o menos así

Actuaciones
- id
- abierto_por
- id_cliente
- fecha_apertura

Trabajadores
- id
- nombre

Clientes
- id
- provincia

La idea es que debería de poder generar una consulta que me devuelva una tabla en la que, por cada trabajador, y por cada provincia, me sume la cantidad de actuaciones que ese trabajador ha abierto.
Espero que se me haya entendido...

Última edición por SirZoX; 08/07/2016 a las 03:17
  #2 (permalink)  
Antiguo 08/07/2016, 04:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta SQL para generar una tabla con resultados autosumados

Si eso es lo que quieres, sería una consulta de manual. Básica.
¿Qué llevas hecho hasta ahora?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/07/2016, 05:17
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 18 años, 7 meses
Puntos: 2
Respuesta: Consulta SQL para generar una tabla con resultados autosumados

Pues de momento (igual es que yo estoy ofuscado hoy...), lo que he logrado es hacer con php 3 consultas simples anidadas con whiles, pero tampoco me da la información que necesito.
Esta consulta que pongo ahora es la que he estado usando hasta hace poco, que es lo que me pidieron desde el principio que hiciera, pero ahora los requisitos ya no son los mismos.

Código MySQL:
Ver original
  1. select count(act.id) as total,
  2.                                     trab.nombre as operador
  3.  
  4.                                     from actuaciones as act
  5.  
  6.                                     inner join trabajadores as trab
  7.                                       on trab.id = act.abierto_por
  8.  
  9.                                     where act.fecha_apertura between '$fechaIni' and '$fechaFin' group by act.abierto_por order by count(act.id) desc

las variables fechaIni y fechaFin son correctas. Y esto me devuelve simplemente una lista de los operadores seguido del número total de trabajos que han abierto dentro del rango de fechas, pero no consigo "expandir" el resultado de la consulta para que en vez del total, me muestre las provincias de forma desagregada.

Última edición por SirZoX; 08/07/2016 a las 05:45
  #4 (permalink)  
Antiguo 08/07/2016, 06:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta SQL para generar una tabla con resultados autosumados

En términos generales vas bien.
Tienes que agregar otro INNER JOIN entre Actuaciones y Clientes para poder agrupar al mismo tiempo por abierto_por y provincia.
Obviamente le agregas el campo provincia al SELECT.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 11/07/2016, 01:22
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 18 años, 7 meses
Puntos: 2
Respuesta: Consulta SQL para generar una tabla con resultados autosumados

Vale, esta es la nueva consulta que al menos ya me retorna los valores que busco, aunque no salen formateados como necesito y no he encontrado el modo tampoco de lograrlo

Código MySQL:
Ver original
  1. select count(act.id) as total,
  2. trab.nombre as operador,
  3. cli.provincia as provincia
  4.  
  5. from actuaciones as act
  6.  
  7. inner join trabajadores as trab
  8. on trab.id = act.abierto_por
  9.  
  10. inner join clientes as cli
  11. on cli.id = act.id_cliente
  12.  
  13. where act.fecha_apertura between '2016-06-17 00:00:00' and '2016-06-17 23:59:59' group by act.abierto_por, cli.provincia
  14. order by cli.provincia asc

Esto devuelve algo como esto:
Código HTML:
Ver original
  1. <tr>
  2. <td>total</td>
  3. <td>operador</td>
  4. <td>provincia</td>
  5. </tr>
  6. <tr>
  7. <td>8</td>
  8. <td>Pepe</td>
  9. <td>Valencia</td>
  10. </tr>
  11. <tr>
  12. <td>2</td>
  13. <td>Luis</td>
  14. <td>Alicante</td>
  15. </tr><tr>
  16. <td>9</td>
  17. <td>Pepe</td>
  18. <td>Alicante</td>
  19. </tr>
  20. <tr>
  21. <td>6</td>
  22. <td>Pepe</td>
  23. <td>Barcelona</td>
  24. </tr>
  25. <tr>
  26. <td>4</td>
  27. <td>Antonio</td>
  28. <td>Barcelona</td>
  29. </tr>

Mientras que yo necesitaría algo así
Código HTML:
Ver original
  1. <tr>
  2. <td></td>
  3. <td>valencia</td>
  4. <td>barcelona</td>
  5. <td>alicante</td>
  6. </tr>
  7. <tr>
  8. <td>Pepe</td>
  9. <td>8</td>
  10. <td>6</td>
  11. <td>9</td>
  12. </tr>
  13. <td>Antonio</td>
  14. <td>0</td>
  15. <td>4</td>
  16. <td>0</td>
  17. </tr>
  18. <td>Luis</td>
  19. <td>0</td>
  20. <td>0</td>
  21. <td>2</td>
  22. </tr>

(Pensé que poniendo en formato HTML aceptaría las tablas para que quedara más claro...)
  #6 (permalink)  
Antiguo 11/07/2016, 10:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta SQL para generar una tabla con resultados autosumados

Por lo pronto, lo que la query te da (limpiemos un poco el codigo para hacerlo mas legible):

Código MySQL:
Ver original
  1.     trab.nombre operador,
  2.     cli.provincia provincia,
  3.     COUNT(act.id) total
  4.     actuaciones act
  5.         INNER JOIN
  6.     trabajadores trab ON trab.id = act.abierto_por
  7.         INNER JOIN
  8.     clientes AS cli ON cli.id = act.id_cliente
  9.     act.fecha_apertura BETWEEN '2016-06-17 00:00:00' AND '2016-06-17 23:59:59'
  10. GROUP BY act.abierto_por , cli.provincia
  11. ORDER BY cli.provincia ASC

Es exactamente lo que pedías. Eso sería visible.

Ahora bien, lo que tu preguntas ahora es un tema de como mostrar en pantalla el resultado, y eso es un tema de programación no de MySQL.

El resultado que describes es lo que se denomina "tabla inversa", y si bien hay algunos DBMS que pueden devolverte una tabla pivoteada, no es el caso de MySQL.
Po rlo demás, lo que quieres es perfectamente posible hacer en programación... Solo requiere manejar estructuras de flujo como WHILE...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: query, sql, tablascruzadas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:17.