UTNianos

Versión completa: [Pedido] Final Gestion de datos 30/7/13
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Otra versión, con NOT IN fue la que hice en el final, y también anda:



SELECT TOP 1 C1.EQUIPO_CAMPEON, C1.ANIO
FROM CAMPEONATO C1
WHERE C1.EQUIPO_CAMPEON NOT IN
(SELECT C2.EQUIPO_CAMPEON
FROM CAMPEONATO C2 WHERE C1.EQUIPO_CAMPEON = C2.EQUIPO_CAMPEON
AND C1.ANIO != C2.ANIO)
ORDER BY C1.ANIO DESC


(04-08-2013 20:48)Martinrg escribió: [ -> ]
(04-08-2013 16:23)juani0033 escribió: [ -> ]
(04-08-2013 12:54)gonnza escribió: [ -> ]los V o F, el primero es VErdadero y el segundo Falso no?


el segundo que es Falso estoy seguro, pero el primero no tanto =P


el 3.a) seria algo como


select equipo_campeon
from campeonato
group by equipo_campeon
having count(equipo_campeon) = 1
order by max(anio) desc[/sql]

y el 3.b) no estoy muy seguro que pide, porque en sql son conjuntos, no hay un "orden"..

pero asumo que se pueden referir a esto tal vez?


[code=sql]
CREATE TRIGGER dbo.inserta_en_orden ON campeonato
instead of INSERT
AS
BEGIN
insert into Campeonato select Equipo_Campeon, anio from inserted order by Anio asc
END




insertar los elementos en orden

sino no tiene sentido la pregunta

Hola, a la query del punto 3.a, le estaría faltando el top 1, porque te pide el último equipo que salió campeón por única vez.

Saludos.

Pregunta, si le agregamos el TOP 1, sigue siendo necesario la funcion MAX(anio) en el ORDER BY. No se podria poner directamente ORDER BY anio DESC ?

Saludos,



si usas group by no tenes "anio", no esta en la clausula del group. Asique ordenas por nombre del equipo, o por alguna funcion aplicada al resto de los campos

(04-08-2013 20:32)alejo89 escribió: [ -> ]El 3.a aclara que no se puede usar funciones. Para mi está mal usar el count para resolverlo, ya que es una funcion.

Yo lo resolvería así,


SELECT TOP 1 C1.EQUIPO_CAMPEON, C1.ANIO
FROM CAMPEONATO C1
WHERE NOT EXIST (SELECT 1 FROM CAMPEONATO C2 WHERE C1.EQUIPO_CAMPEON = C2.EQUIPO_CAMPEON AND C1.ANIO <> C2.ANIO)
ORDER BY 2 DESC




yo por funciones interprete a funciones propias (create function) porque sino te mandas una recursiva y ya, y creo que quieren que lo resuelvas en ANSI SQL

pero bueno es cuestionable, supongo que habria que preguntarlo al profe
(05-08-2013 11:24)gonnza escribió: [ -> ]
(04-08-2013 20:48)Martinrg escribió: [ -> ]
(04-08-2013 16:23)juani0033 escribió: [ -> ]
(04-08-2013 12:54)gonnza escribió: [ -> ]los V o F, el primero es VErdadero y el segundo Falso no?


el segundo que es Falso estoy seguro, pero el primero no tanto =P


el 3.a) seria algo como


select equipo_campeon
from campeonato
group by equipo_campeon
having count(equipo_campeon) = 1
order by max(anio) desc[/sql]

y el 3.b) no estoy muy seguro que pide, porque en sql son conjuntos, no hay un "orden"..

pero asumo que se pueden referir a esto tal vez?


[code=sql]
CREATE TRIGGER dbo.inserta_en_orden ON campeonato
instead of INSERT
AS
BEGIN
insert into Campeonato select Equipo_Campeon, anio from inserted order by Anio asc
END




insertar los elementos en orden

sino no tiene sentido la pregunta

Hola, a la query del punto 3.a, le estaría faltando el top 1, porque te pide el último equipo que salió campeón por única vez.

Saludos.

Pregunta, si le agregamos el TOP 1, sigue siendo necesario la funcion MAX(anio) en el ORDER BY. No se podria poner directamente ORDER BY anio DESC ?

Saludos,



si usas group by no tenes "anio", no esta en la clausula del group. Asique ordenas por nombre del equipo, o por alguna funcion aplicada al resto de los campos

(04-08-2013 20:32)alejo89 escribió: [ -> ]El 3.a aclara que no se puede usar funciones. Para mi está mal usar el count para resolverlo, ya que es una funcion.

Yo lo resolvería así,


SELECT TOP 1 C1.EQUIPO_CAMPEON, C1.ANIO
FROM CAMPEONATO C1
WHERE NOT EXIST (SELECT 1 FROM CAMPEONATO C2 WHERE C1.EQUIPO_CAMPEON = C2.EQUIPO_CAMPEON AND C1.ANIO <> C2.ANIO)
ORDER BY 2 DESC




yo por funciones interprete a funciones propias (create function) porque sino te mandas una recursiva y ya, y creo que quieren que lo resuelvas en ANSI SQL

pero bueno es cuestionable, supongo que habria que preguntarlo al profe

claro, yo entendí lo mismo, porque no dice funciones de grupo, igualmente se le pregunta al profesor y listo.
Es una locura si pido si lo pueden volver a subir no?
(13-01-2015 13:19)coolerking escribió: [ -> ]Es una locura si pido si lo pueden volver a subir no?

idem
Hola, aca dejo el final junto con mi resolucion del ejercicio de campeonato.
Spoiler: Mostrar
Como aborrezco esas restricciones berretas que ponen dios...

3a)


select
c1.equipo_campeon
from
campeonato c1
left join campeonato c2 on c1.equipo_campeon = c2.equipo_campeon and c1.anio != c2.anio
where
c2.equipo is null
order by
c1.anio desc
limit 1


Yo con el trigger hice esto


CREATE TRIGGER dbo.inserta_ordenado on campeonato
INSTEAD OF INSERT
AS
BEGIN
IF (SELECT anio FROM inserted) = (SELECT TOP 1 anio + 1 FROM CAMPEONATO ORDER BY anio DESC)
INSERT INTO CAMPEONATO (equipo_campeon,anio) (SELECT * FROM inserted)
ELSE
RAISERROR('error LOS ANIOS DEBEN SER CONSECUTIVOS',16,1)
END


Buenas noches gente! Les planteo una duda que no es de concepto sino sobre el criterio de evaluación. La planteo acá porque me surgió puntualmente con el punto 1b) UNIQUE admite varios NULL según SQL http://www.w3schools.com/ que si mal no tengo entendido es un estandar oficial, aunque no sé si es ANSI...
Ahora si nos referimos a SQL-Server 2008, no lo probé pero creo que admite un solo NULL.

Entonces qué respondo? Yo calculo que es tanto verdadera como falsa pero aclarando que motor o estandar se toma como base.

La pregunta mia sería en realidad, ellos qué pretendian que respondamos en este punto? Hay que justificar los VoF? porque en este caso particular me parece que requiere una aclaración al menos.

Desde ya muchas gracias!
(12-12-2015 21:10)DarkCrazy escribió: [ -> ]Buenas noches gente! Les planteo una duda que no es de concepto sino sobre el criterio de evaluación. La planteo acá porque me surgió puntualmente con el punto 1b) UNIQUE admite varios NULL según SQL http://www.w3schools.com/ que si mal no tengo entendido es un estandar oficial, aunque no sé si es ANSI...
Ahora si nos referimos a SQL-Server 2008, no lo probé pero creo que admite un solo NULL.

Entonces qué respondo? Yo calculo que es tanto verdadera como falsa pero aclarando que motor o estandar se toma como base.

La pregunta mia sería en realidad, ellos qué pretendian que respondamos en este punto? Hay que justificar los VoF? porque en este caso particular me parece que requiere una aclaración al menos.

Desde ya muchas gracias!

Lo probé en el SQL-Server 2014 y solo te deja insertar un NULL.
En Oracle te deja poner más de uno.

Sería falsa, porque depende del motor de base de datos.

Los VoF de Gestión son cualquier cosa. Hay algunos que no están en los apuntes.
(25-02-2015 00:12)coolerking escribió: [ -> ]Yo con el trigger hice esto


CREATE TRIGGER dbo.inserta_ordenado on campeonato
INSTEAD OF INSERT
AS
BEGIN
IF (SELECT anio FROM inserted) = (SELECT TOP 1 anio + 1 FROM CAMPEONATO ORDER BY anio DESC)
INSERT INTO CAMPEONATO (equipo_campeon,anio) (SELECT * FROM inserted)
ELSE
RAISERROR('error LOS ANIOS DEBEN SER CONSECUTIVOS',16,1)
END



Y si se insertan varios registros a la vez con el "select anio from inserted" cuál compara?

Te tira este error:

La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.
(21-12-2015 23:24)leandrong escribió: [ -> ]
(25-02-2015 00:12)coolerking escribió: [ -> ]Yo con el trigger hice esto


CREATE TRIGGER dbo.inserta_ordenado on campeonato
INSTEAD OF INSERT
AS
BEGIN
IF (SELECT anio FROM inserted) = (SELECT TOP 1 anio + 1 FROM CAMPEONATO ORDER BY anio DESC)
INSERT INTO CAMPEONATO (equipo_campeon,anio) (SELECT * FROM inserted)
ELSE
RAISERROR('error LOS ANIOS DEBEN SER CONSECUTIVOS',16,1)
END



Y si se insertan varios registros a la vez con el "select anio from inserted" cuál compara?

Te tira este error:

La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.

tenes 1 campeón por año leandrong, no creo q sean tan putos!!
Páginas: 1 2
URLs de referencia