Consulta 03/03/2009

2 views
Skip to first unread message

Diego Navarian

unread,
Feb 13, 2011, 6:28:11 PM2/13/11
to FINAL_GDD
Miren este


La tabla partido que representa un partido de fútbol disputado entre 2
equipos. Según las siguientes características:
• Id: identificador del partido (entero autonumérico)
• Equipo_local: nombre del equipo local
• Equipo_visitante: nombre del equipo visitante
• Fecha_partido: dia en que se disputo el partido
• Goles_equipo_local: goles convertidos por el equipo local
• Goles_equipo_visitante: goles convertidos por el equipo visitante



Se sabe que por cada partido ganado se otorgan 3 puntos, por cada
partido empatado 1 punto y por cada partido perdido 0 puntos.
No necesariamente todos los equipos han disputado la misma cantidad de
partidos.
Todos los equipos jugaron al menos 1 vez de local.



3.b) Escriba la/las sentencias SQL necesarias para retornar para cada
equipo la diferencia de goles (goles a favor menos goles en contra)
por año. No se permite: el uso de tablas auxiliares, la modificación
del modelo, el uso de cursores, el uso de subconsultas en la cláusula
FROM, vistas, ni el uso de procedimientos ni funciones que retornen
tipos no escalares.


Ahora yo hice esto


select p1.equipo_Local,
((select sum(goles_equipo_local),
to_number(to_char(p2.Fecha_Partido,'YYYY')) from partido p2 where
p1.equipo_local = p2.equipo_local group by
to_number(to_char(p2.Fecha_Partido,'YYYY')))-
(select sum(goles_equipo_visitante),
to_number(to_char(p3.Fecha_Partido,'YYYY')) from partido p3 where
p1.equipo_local = p3.equipo_local group by
to_number(to_char(p3.Fecha_Partido,'YYYY')))) as Diferencia
from partido p1;

pero me tira " too many values" y no se q mas hacer

Gracias

Diego

aca van los datos




create table Partido
(
id int,
Equipo_local varchar(50),
Equipo_visitante varchar(50),
Fecha_Partido date,
Goles_Equipo_Local int,
Goles_Equipo_Visitante int,
primary key (id)
);

insert into Partido
(id,Equipo_Local,Equipo_Visitante,Fecha_Partido,Goles_Equipo_Local,Goles_Equipo_Visitante)
values (1,'River','Boca', TO_DATE('05/31/1998','mm/dd/YYYY'), 3, 0);
insert into Partido
(id,Equipo_Local,Equipo_Visitante,Fecha_Partido,Goles_Equipo_Local,Goles_Equipo_Visitante)
values (2,'River','Velez', TO_DATE('06/3/1998','mm/dd/YYYY'), 5, 0);
insert into Partido
(id,Equipo_Local,Equipo_Visitante,Fecha_Partido,Goles_Equipo_Local,Goles_Equipo_Visitante)
values (3,'River','Lanus', TO_DATE('07/11/1998','mm/dd/YYYY'), 3, 3);
insert into Partido
(id,Equipo_Local,Equipo_Visitante,Fecha_Partido,Goles_Equipo_Local,Goles_Equipo_Visitante)
values (4,'Boca','Velez', TO_DATE('05/30/1998','mm/dd/YYYY'), 3, 2);
insert into Partido
(id,Equipo_Local,Equipo_Visitante,Fecha_Partido,Goles_Equipo_Local,Goles_Equipo_Visitante)
values (5,'Boca','Lanus', TO_DATE('08/24/1998','mm/dd/YYYY'), 3, 3);
insert into Partido
(id,Equipo_Local,Equipo_Visitante,Fecha_Partido,Goles_Equipo_Local,Goles_Equipo_Visitante)
values (6,'Boca','River', TO_DATE('09/11/1998','mm/dd/YYYY'), 0, 3);
insert into Partido
(id,Equipo_Local,Equipo_Visitante,Fecha_Partido,Goles_Equipo_Local,Goles_Equipo_Visitante)
values (7,'Boca','Indepte', TO_DATE('09/11/1998','mm/dd/YYYY'), 3, 0);
insert into Partido
(id,Equipo_Local,Equipo_Visitante,Fecha_Partido,Goles_Equipo_Local,Goles_Equipo_Visitante)
values (8,'River','Lanus', TO_DATE('07/11/1999','mm/dd/YYYY'), 3, 3);
insert into Partido
(id,Equipo_Local,Equipo_Visitante,Fecha_Partido,Goles_Equipo_Local,Goles_Equipo_Visitante)
values (9,'River','Lanus', TO_DATE('07/11/1999','mm/dd/YYYY'), 7, 3);
insert into Partido
(id,Equipo_Local,Equipo_Visitante,Fecha_Partido,Goles_Equipo_Local,Goles_Equipo_Visitante)
values (8,'River','Lanus', TO_DATE('07/11/1997','mm/dd/YYYY'), 0, 3);



Matias Corbanini

unread,
Feb 13, 2011, 6:48:31 PM2/13/11
to FINAL_GDD
Yo hice esto y me funciono bien:

select equipo_local, year fecha_partido, sum (goles_equipo_local -
goles_equipo_visitante)}
from partido
group by equipo_local, year(fecha)
order by 1

les parece?

Perdon, no puedo mirar tu select pq me estoy yendo, dsp me fijo a ver
que onda,

Saludos!

Diego Navarian

unread,
Feb 13, 2011, 6:53:41 PM2/13/11
to fina...@googlegroups.com
que pelotudo, tenes razon era una boludez yo despues de dar miles de vueltas hice esto y me dio lo mismo pero es mas complicado

select distinct p1.equipo_Local, to_number(to_char(p1.Fecha_Partido,'YYYY')),
((select sum(goles_equipo_local) from partido p2 where p1.equipo_local = p2.equipo_local and to_number(to_char(p1.Fecha_Partido,'YYYY'))= to_number(to_char(p2.Fecha_Partido,'YYYY')))-
(select sum(goles_equipo_visitante) from partido p3 where p1.equipo_local = p3.equipo_local and to_number(to_char(p1.Fecha_Partido,'YYYY')) = to_number(to_char(p3.Fecha_Partido,'YYYY')))) as Diferencia
from partido p1;

Gracias y saludos

Javier Hinmel

unread,
Feb 13, 2011, 11:39:58 PM2/13/11
to fina...@googlegroups.com
mmmm...la query que tira Matias, solo tiene en cuenta la diferencia que el equipo obtuvo de local, que pasa con los goles de visitante?

yo hice esto:

select pl.equipo_local, year(pl.fecha_partido) as anio, (sum (pl.goles_equipo_local - pl.goles_equipo_visitante) + pv.difVisit) as diferencia
from partido pl
inner join
(
    select equipo_visitante,year(fecha_partido) as anio, sum (goles_equipo_visitante - goles_equipo_local) as difVisit
    from partido group by equipo_visitante, year(fecha_partido)
) pv on pl.equipo_local = pv.equipo_visitante

group by pl.equipo_local, year(pl.fecha_partido), pv.difVisit
order by 1,2

El problema que tiene esta query es, que si en el año el equipo nunca juega de local o nunca juega de visitante, da valores invalidos, pero este parece no ser un caso real. Si alguien tiene una query mas optima, sera bienvenida.

Javier.


2011/2/13 Diego Navarian <nava...@gmail.com>

Matias Corbanini

unread,
Feb 14, 2011, 1:13:30 AM2/14/11
to FINAL_GDD
pero el enunciado dice:
"para cada equipo la diferencia de goles (goles a favor menos goles en
contra) "

y en mi select sumo eso justamente:
-> sum (goles_equipo_local - goles_equipo_visitante)

No veo la nececidad de hacer todo lo demas, ya que por esto que aclara
el enunciado:
"Todos los equipos jugaron al menos 1 vez de local. "
Tenes contemplados a TODOS los equipos, mas alla de que juegen de
visitantes o no.

On 14 feb, 01:39, Javier Hinmel <javierhin...@gmail.com> wrote:
> mmmm...la query que tira Matias, solo tiene en cuenta la diferencia que el
> equipo obtuvo de local, que pasa con los goles de visitante?
>
> yo hice esto:
>
> select pl.equipo_local, year(pl.fecha_partido) as anio, (sum
> (pl.goles_equipo_local - pl.goles_equipo_visitante) + pv.difVisit) as
> diferencia
> from partido pl
> inner join
> (
>     select equipo_visitante,year(fecha_partido) as anio, sum
> (goles_equipo_visitante - goles_equipo_local) as difVisit
>     from partido group by equipo_visitante, year(fecha_partido)
> ) pv on pl.equipo_local = pv.equipo_visitante
>
> group by pl.equipo_local, year(pl.fecha_partido), pv.difVisit
> order by 1,2
>
> El problema que tiene esta query es, que si en el año el equipo nunca juega
> de local o nunca juega de visitante, da valores invalidos, pero este parece
> no ser un caso real. Si alguien tiene una query mas optima, sera bienvenida.
>
> Javier.
>
> 2011/2/13 Diego Navarian <navar...@gmail.com>
>
> > que pelotudo, tenes razon era una boludez yo despues de dar miles de
> > vueltas hice esto y me dio lo mismo pero es mas complicado
>
> > select distinct p1.equipo_Local,
> > to_number(to_char(p1.Fecha_Partido,'YYYY')),
> > ((select sum(goles_equipo_local) from partido p2 where p1.equipo_local =
> > p2.equipo_local and to_number(to_char(p1.Fecha_Partido,'YYYY'))=
> > to_number(to_char(p2.Fecha_Partido,'YYYY')))-
> > (select sum(goles_equipo_visitante) from partido p3 where p1.equipo_local =
> > p3.equipo_local and to_number(to_char(p1.Fecha_Partido,'YYYY')) =
> > to_number(to_char(p3.Fecha_Partido,'YYYY')))) as Diferencia
> > from partido p1;
>
> > Gracias y saludos
>
> > El 13 de febrero de 2011 20:48, Matias Corbanini <
> > mcorbaninica...@gmail.com> escribió:
Reply all
Reply to author
Forward
0 new messages