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

Selects anidados

Estas en el tema de Selects anidados en el foro de Mysql en Foros del Web. Hola a todos! A ver si me podéis ayudar con una consulta que debo hacer para un ejercicio He creado dos tablas con las especificaciones ...
  #1 (permalink)  
Antiguo 07/01/2013, 10:46
 
Fecha de Ingreso: octubre-2010
Mensajes: 88
Antigüedad: 13 años, 6 meses
Puntos: 1
Selects anidados

Hola a todos! A ver si me podéis ayudar con una consulta que debo hacer para un ejercicio
He creado dos tablas con las especificaciones ya impuestas de la siguiente manera:


Código MySQL:
Ver original
  1. # Creamos tabla equipos
  2. equipos( registro INT PRIMARY KEY AUTO_INCREMENT,
  3.        nombre VARCHAR(30) NOT NULL,
  4.        nombre_entrenador VARCHAR(35) NOT NULL,
  5.        nombre_cancha VARCHAR(50) NOT NULL,
  6.        poblacion varchar(25) not null,
  7.        anio_fundacion INT(4) NOT NULL,
  8.        anotaciones blob);
  9.  
  10.  
  11. #Creamos tabla partidos
  12. partidos (registro INT PRIMARY KEY AUTO_INCREMENT,
  13.             id_equipo1 INT NOT NULL,
  14.             resultado_equipo1 INT NOT NULL,
  15.             id_equipo2 INT NOT NULL,
  16.             resultado_equipo2 INT NOT NULL);
Donde id_equipo1 e id_equipo2 de la tabla partidos coincide con la primary key "registro" de la tabla equipos.
Lo que debo de obtener es el Nº total de partidos jugados y el nombre del equipo ordenado decrecientemente por el nº de partidos jugados.
Se que debo hacer varias selects, una para obtener el nº de partidos jugados de ida, que serían los de id_equipo1 y otra select para obtener el nº de partidos jugados de vuelta (id_equipo2) y posteriormente sumar el resultado de ambas para averiguar el total de partidos jugados por un equipo.

Bueno, eso es lo que creo que hay que hacer, pero al hacer las selects los datos se me están repitiendo y no consigo que me aparezca bien la información.

Espero haberme explicado bien y que podáis ayudarme.

Un saludo

Última edición por gnzsoloyo; 07/01/2013 a las 11:47 Razón: Código SQL mal etiquetado
  #2 (permalink)  
Antiguo 07/01/2013, 11:04
Avatar de rodno  
Fecha de Ingreso: enero-2009
Ubicación: En algun lugar de Cuba
Mensajes: 426
Antigüedad: 15 años, 2 meses
Puntos: 43
Respuesta: Selects anidados

Buenas,

Segun entiendo quedaria algo asi:

Código MySql:
Ver original
  1. Select equipos.nombre, COUNT(*) as count_partidos FROM equipos INNER JOIN partidos ON equipos.registro = partidos.id_equipo1 GROUP BY partidos.id_equipo1 Order By count_partidos DESC

PD: No la he probado

Saludos
__________________
"No te preocupes si no funciona bien. Si todo lo hiciera, no tendrías trabajo."
"El problema no es no saber, sino no saber quién sabe"
..::Con Karma se piensa mejor::..
  #3 (permalink)  
Antiguo 07/01/2013, 11:53
 
Fecha de Ingreso: octubre-2010
Mensajes: 88
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Selects anidados

Rodno gracias por responder.

Pero esa query sólo me devuelve el número de los partidos de ida, es decir, los de id_equipo1, y yo necesito que además me devuelva el número de partidos de vuelta (que es aquí donde tengo el problema y me repite los datos).
Una vez obtenidos esos datos debo sumarlos, y al final lo único que debe aparecerme es el nombre del equipo y el total =sum(id_equipo1, id_equipo2)

No se si me explico bien...
  #4 (permalink)  
Antiguo 07/01/2013, 12:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Selects anidados

Código MySQL:
Ver original
  1. SELECT T1.nombre, COUNT( * ) totpart
  2. (
  3.  
  4. SELECT nombre, id_equipo1 id
  5. FROM `partidos` p
  6. INNER JOIN equipos e ON p.id_equipo1 = e.registro
  7. )
  8.  
  9. SELECT nombre, id_equipo2
  10. FROM `partidos` p
  11. INNER JOIN equipos e ON p.id_equipo2 = e.registro
  12. )
  13. )T1
  14. GROUP BY T1.id
  15. ORDER BY totpart DESC
  #5 (permalink)  
Antiguo 07/01/2013, 12:14
 
Fecha de Ingreso: octubre-2010
Mensajes: 88
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Selects anidados

Justo era eso.

Gracias jurena

Etiquetas: anidados, select, selects, tabla
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 12:00.