Estoy trabajando con una base de datos de un volúmen importante últimamente y ahora he de sacar estadísticas de los registros que se inserten.
Hace bastante tiempo que no practico en plan consultas complicadas con mysql y no me acuerdo si se puede y cómo hacer ciertas consultas.
Os comento, casi todas se basan en una tabla(que varía dependiendo de la estadística) que tiene que mostrar todos sus registros, tengan o no coincidencia con otras tablas.
Me explico, tengo por ejemplo la tabla 1, de la cual se tienen que mostrar todos los registros:
campo1
campo2
campo3
campo4
Luego tengo que clasificar en 2 grupos, a partir de otra tabla, una serie de registros que, a su vez, se dividen en otros 2 grupos cada una.
Os muestro un ejemplo de cómo sería la cosa:
Código:
| Usuarios condicion1 | Usuarios condicion 2 Tipos |---------------------------------------------------------------- | Hombre | Mujer | Hombre | Mujer ------------------------------------------------------------------------------------- campo1 | | | | ------------------------------------------------------------------------------------- campo2 | | | | ------------------------------------------------------------------------------------- campo3 | | | | ------------------------------------------------------------------------------------- campo4 | | | | -------------------------------------------------------------------------------------
Siendo la tabla de los campos una tabla que es referenciada por la tabla en la que hago las condiciones 1 y 2. Esta última es referenciada por otra tabla que contiene el sexo de los usuarios.
En total, 3 tablas de las que en una debo sacar todos los registros, tengan o no coincidencia con la tabla que le referencia(si no la tienen el resultado del count sería 0) y a su vez que sean de un sexo u otro.
Por ahora he conseguido separar las consultas en usuarios condicion1 mujer, usuarios condicion 1 hombre, usuarios condicion2 mujer y usuarios condicion2 hombre, cada uno a su vez agrupado por los campos 1, 2 ,3 y 4.
Código SQL:
Ver original
//Mujeres condicion1 agrupadas por campos SELECT campo_agrupa, COUNT(id_usuario) FROM tabla_usuarios u INNER JOIN tabla_condiciones uod ON uod.d_usuario = u.d_usuario WHERE sexo = 1 AND u.d_usuario NOT IN(SELECT id_usuario FROM tabla_condiciones WHERE condicion1 != 1) AND uod.id_usuario NOT IN(SELECT d_usuario FROM otra_tabla_de_condicion_sin_importancia WHERE fin_condicion IS NOT NULL) AND uod.id_usuario NOT IN(SELECT id_usuario FROM otra_tabla_mas_de_condicion_sin_importancia WHERE ffin_condicion IS NOT NULL) GROUP BY campo_agrupa ORDER BY campo_agrupa
Esto lo hago para las 4 subdivisiones, se podría hacer todo en una sola consulta?
También decir que las tablas donde muestro los resultados son estáticas, lo único que cambia es el count de los usuarios que cumplen las condiciones.