Ayuda con sentencia sql

Iniciado por 50l3r, 23 Marzo 2010, 15:58 PM

0 Miembros y 2 Visitantes están viendo este tema.

50l3r

Veran, tengo que realizar la siguiente sentencia ero no se me ocurre como:

hallar el numero maximo de partidos ganados por cada equipo añadiendo el nombre del equipo y ordenar el resultado decrecientemente por el nº de partidos ganados

el ej dice que se puede utilizar "union all"

estas son las tablas que poseo, os hago un describe:


mysql> describe equipos
    -> ;
+-------------------+-------------+------+-----+---------+----------------+
| Field             | Type        | Null | Key | Default | Extra          |
+-------------------+-------------+------+-----+---------+----------------+
| registro          | int(11)     | NO   | PRI | NULL    | auto_increment |
| nombre            | varchar(30) | NO   | MUL | NULL    |                |
| nombre_entrenador | varchar(35) | NO   |     | NULL    |                |
| nombre_cancha     | varchar(30) | NO   |     | NULL    |                |
| poblacion         | varchar(25) | NO   |     | NULL    |                |
| anio_fundacion    | int(4)      | NO   |     | NULL    |                |
| anotaciones       | blob        | YES  |     | NULL    |                |
+-------------------+-------------+------+-----+---------+----------------+


mysql> describe partidos;
+-------------------+---------+------+-----+---------+----------------+
| Field             | Type    | Null | Key | Default | Extra          |
+-------------------+---------+------+-----+---------+----------------+
| registro          | int(11) | NO   | PRI | NULL    | auto_increment |
| id_equipo         | int(11) | NO   |     | NULL    |                |
| resultado_equipo1 | int(11) | NO   |     | NULL    |                |
| id_equipo2        | int(11) | NO   |     | NULL    |                |
| resultado_equipo2 | int(11) | NO   |     | NULL    |                |
+-------------------+---------+------+-----+---------+----------------+


yo creo que es casi imposible, no se me ocurre como :S

^Tifa^

No es imposible  ;)

Mira, te dare una pista para estos tipos de casos. En tu situacion deberas hacer un JOIN si usas el UNION te saldria 1 sola fila con los resultados de ambas tablas y no podras saber cuales pertenecen a una o cuales a la otra tabla  :xD

para obtener pos el maximo de partidos ganados por cada equipo seria algo como:

SELECT MAX(anotaciones) FROM equipos GROUP BY (nombre) ORDER BY nombre DESC

Siempre y cuando anotaciones sean partidos ganados, y nombre sea el nombre del equipo.

Harias algo similar en la otra tabla para obtener lo mismo  ;)  si te funciona (ya que no lo he probado) pasa la info para entonces hacer un JOIN de las dos.

Shell Root

Es posible, pero es mejor usar Store Procedure!

Consulta sobre funciones como... MAX(), COUNT(), INNER JOIN, DESC, ASC.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

seba123neo

y donde esta la relacion de esas 2 tablas..??  :o :o deberia tener un idequipo sino es imposible saber el nombre de un equipo dado un ID...

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

^Tifa^

Citary donde esta la relacion de esas 2 tablas..??

Visualmente, pareciera que el campo registro es su indice de relacion entre las dos tablas  ;)  pero si por lo menos el detallase si la consulta SQL le funcionase, se pudiera continuar ayudando y armarle un JOIN de las dos tablas...  :P

ssccaann43 ©

#5
Cita de: 50l3r en 23 Marzo 2010, 15:58 PM
yo creo que es casi imposible, no se me ocurre como :S

Mi punto de vista...!

Presumo que Registro en la tabla equipo es el indice de dicha tabla. Pero asi mismo id_equipo1 e id_equipo2 debe estar relacionado con ese Registro que tienes en la tabla equipo. Ahora bien.

Si anotaciones es el número de partidos ganados, pues con el query de Tifa te resuelves. Si no es asi, pues debes hacer par de select. Por ejemplo:

Lo primero que debemos hacer es relacionar la tabla Equipos con Partidos. Yo particularmente lo hago de la siguiente manera. Nota: Aunque uso SQL Server, debe ser igual.

Código (sql) [Seleccionar]


CREATE VIEW VISTA
AS
SELECT  partidos.id_equipo, Equipos.nombre AS PRIMER_EQUIPO, partidos.id_equipo2, Equipos_1.nombre AS SEGUNDO_EQUIPO,
partidos.resultado_equipo1, partidos.resultado_equipo2
FROM Equipos INNER JOIN
partidos ON Equipos.registro = partidos.id_equipo INNER JOIN
Equipos Equipos_1 ON partidos.id_equipo2 = Equipos_1.registro



Imagen:


Luego lo que debo es hacer un select a dicha vista donde visualizo a los equipos y las veces ganadas...

Código (sql) [Seleccionar]


SELECT     (CASE WHEN RESULTADO_EQUIPO1 > RESULTADO_EQUIPO2 THEN PRIMER_EQUIPO ELSE SEGUNDO_EQUIPO END) AS GANADOR,
                     COUNT((CASE WHEN RESULTADO_EQUIPO1 > RESULTADO_EQUIPO2 THEN PRIMER_EQUIPO ELSE SEGUNDO_EQUIPO END))
                     AS Total_Ganados
FROM         VISTA1
GROUP BY (CASE WHEN RESULTADO_EQUIPO1 > RESULTADO_EQUIPO2 THEN PRIMER_EQUIPO ELSE SEGUNDO_EQUIPO END)





Resuelto...!  ;-)


PD.: Allí no tomo en cuenta un EMPATE... Ojo con eso...! Pero ya tienes una respuesta a tú duda... Saludos a mi bella Tifa...!
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

50l3r

tengo un indice en la tabla equipos del campo nombre, para por ejemplo sacar el nombre en la tabla partidios hago un inner join:
Código (sql) [Seleccionar]

SELECT e1.nombre equipo1,e2.nombre equipo2,avg(resultado_equipo1 + resultado_equipo2) as media FROM partidos  p INNER JOIN equipos e1 on p.id_equipo=e1.registro INNER JOIN equipos e2 on p.id_equipo2=e2.registro GROUP BY id_equipo;


ahi saco por ejemplo la media de puntos de cada partido jugado, y uso inner join para coger el nombre del equipo

ssccaann43 ©

- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

^Tifa^

Mientras mas leo... menos entiendo lo que se esta solicitando  ::)  que alguien me explique.

ssccaann43 ©

Yo presumo que tiene un chapuzon de dudas y confusiones, creo que con mi post resuelve su duda...!
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"