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

Consulta y agrupación en mas de dos tablas

Estas en el tema de Consulta y agrupación en mas de dos tablas en el foro de Mysql en Foros del Web. Hola a todos, Les describo la consulta que estoy tratando de hacer a ver si me pueden dar alguna idea, particularmente yo trabajo con SELECTs ...
  #1 (permalink)  
Antiguo 04/05/2011, 17:27
Avatar de aovalle  
Fecha de Ingreso: junio-2002
Ubicación: Bogotá, Colombia
Mensajes: 54
Antigüedad: 21 años, 10 meses
Puntos: 0
Consulta y agrupación en mas de dos tablas

Hola a todos,

Les describo la consulta que estoy tratando de hacer a ver si me pueden dar alguna idea, particularmente yo trabajo con SELECTs sencillos y creo que en esto tengo que usar algo mas elaborado:

Actualmente tengo 3 tablas así:

Clasificacion
- Id_clasificacion
- TextoClasificacion

Titulos:
- Id_Titulo
- TextoTitulo
- Clasificacion_id

Ejemplares
- Id_Ejemplar
- Titulo_Id

En ese sentido, las tablas están relacionadas así: “Clasificacion” por el campo “Id_Clasificacion” con “Titulos” por el campo “Clasificacion_Id”

Y también “Titulos” por “Id_Titulo” con “Ejemplares” por “Titulo_Id”
La consulta que estoy tratando de obtener es la cantidad de títulos y ejemplares agrupadas por clasificación, debería traer algo como esto:



Clasificacion | Titulos | Ejemplares
A | 10 | 20
B | 15 | 21
C | 12 | 24

De antemanos mil gracias a cualquier ayuda!
  #2 (permalink)  
Antiguo 05/05/2011, 02:39
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta y agrupación en mas de dos tablas

Numero de titulos por Clasificación
Código MySQL:
Ver original
  1. SELECT Clasificacion_Id, count(*) as numTitulos FROM Titulos GROUP BY Clasificacion_Id;

Numero de ejemplares por titulo
Código MySQL:
Ver original
  1. SELECT Titulo_Id, count(*) as numEjemplares FROM Ejemplares GROUP BY Titulo_Id;

Ahora lo juntamos

Código MySQL:
Ver original
  1. SELECT C.Id_clasificacion,
  2.              C.TextoClasificacion,
  3.              SbcT.numTitulos,
  4.              SbcE.numEjemplares
  5. FROM Clasificacion as C
  6.              INNER JOIN (SELECT Clasificacion_Id,
  7.                                               count(*) as numTitulos
  8.                                     FROM Titulos
  9.                                     GROUP BY Clasificacion_Id) as SbcT
  10.                     ON C.Id_clasificacion=SbcT.Clasificacion_Id)
  11.              INNER JOIN (SELECT Titulo_Id,
  12.                                               count(*) as numEjemplares
  13.                                     FROM Ejemplares
  14.                                     GROUP BY Titulo_Id) as SbcE
  15.                    ON SbcT.Id_Titulo=SbcE.Titulo_Id;

Si?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 05/05/2011, 11:08
Avatar de aovalle  
Fecha de Ingreso: junio-2002
Ubicación: Bogotá, Colombia
Mensajes: 54
Antigüedad: 21 años, 10 meses
Puntos: 0
Respuesta: Consulta y agrupación en mas de dos tablas

Hola,

Muchas gracias por tu respuesta; pero mira que me arroja un error que no veo como solucionar al ejecutarlo dice:

Código:
Unknown column 'SbcT.Id_Titulo' in 'on clause'
Sin embargo las dos consultas que planteas al inicio funcionan bien.

Me podrías dar una mano?

Gracias!
  #4 (permalink)  
Antiguo 06/05/2011, 05:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta y agrupación en mas de dos tablas

Perdon!!!! Error!!!!

Numero de ejemplares por Clasificación
Código MySQL:
Ver original
  1. SELECT C1.Id_clasificacion, count(*) as numEjemplares
  2. FROM Clasificacion as C1
  3. INNER JOIN Titulos
  4. ON C1. Id_clasificacion=Titulos. Clasificacion_id
  5. INNER JOIN Ejemplares
  6. ON Titulos. Id_Titulo= Ejemplares.Titulo_Id
  7. GROUP BY Titulo_Id;

es la suma de ejemplares de todos los titulos de una clasificación.


Código MySQL:
Ver original
  1. SELECT C.Id_clasificacion,
  2.              C.TextoClasificacion,
  3.              SbcT.numTitulos,
  4.              SbcE.numEjemplares
  5. FROM Clasificacion as C
  6.              INNER JOIN (SELECT Clasificacion_Id,
  7.                                               count(*) as numTitulos
  8.                                     FROM Titulos
  9.                                     GROUP BY Clasificacion_Id) as SbcT
  10.                     ON C.Id_clasificacion=SbcT.Clasificacion_Id)
  11.              INNER JOIN (SELECT C1.Id_clasificacion, count(*) as numEjemplares
  12.                                             FROM Clasificacion as C1
  13.                                                    INNER JOIN Titulos
  14.                                                        ON C1. Id_clasificacion=Titulos. Clasificacion_id
  15.                                                     INNER JOIN Ejemplares
  16.                                                         ON Titulos. Id_Titulo= Ejemplares.Titulo_Id
  17.                                               GROUP BY Titulo_Id) as SbcE
  18.                    ON C.Id_clasificacion=SbcE.Id_clasificacion;

Ahora ... creo.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 06/05/2011 a las 05:22

Etiquetas: tablas
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 08:38.