alanezz / Syllabus-2019-1

26 stars 13 forks source link

Pregunta 5 y 7 parte sql ayudantía 2. #25

Closed chocopiano closed 5 years ago

chocopiano commented 5 years ago

Hola, alguien me podría explicar porfa la solución de dicha pregunta. La respuesta de ayudantía fue

SELECT uid FROM Partidas P1
where NOT EXISTS
(SELECT * FROM PartidasP2
WHERE P1.uid=P2.uid
AND P2.duracion>30) 

Y la 7 que hay unas cosas raras jajaja

Gracias!

arpincheira commented 5 years ago

Hola, no soy ayudante, pero creo que lo que hace la consulta de la ayudantía es crear una tabla que no considere ninguno de los datos presentes en el exists, es decir, si existe un dato en P1(partidas) que posea la misma id que un dato en P2(también la tabla partidas) y que tenga una duración mayor a 30 entonces no lo considera.

Con respecto a la consulta 7, no la solucionaron en mi ayudantía pero no se si sirva la siguiente solución: SELECT Alias FROM Users, Partidas WHERE Users.uid = Partidas.uid and Partidas.duracion = (SELECT MAX(duración) FROM Partidas)

Puede que no sirva mucho pero espero haberte ayudado

TamaraCucumides commented 5 years ago

Hola, lo que comenta @arpincheira está bien.

El comando EXISTS lo que hace es retornar TRUE si la consulta anidada es no vacía y retornar FALSE en caso de que sea vacía. Lo que hace la solución entonces es seleccionar a aquellos usuarios que no posean ninguna partida cuya duración sea mayor a 30 minutos.

Para la pregunta 7 si está medio extraña la solución, invoco a @cmgainza para que la revise/explique. De todas maneras, la consulta que propone @arpincheira está buena!

TamaraCucumides commented 5 years ago

Pueden considerar esta solución también para la consulta 7:

SELECT U.alias
FROM Usuarios AS U, Partidas AS P1
WHERE U.uid = P1.uid AND
NOT EXISTS (SELECT * FROM PARTIDAS AS P2
WHERE P2.duración > P1.duración)
TamaraCucumides commented 5 years ago

Y la consulta de la 7 corregida queda de la siguiente manera:

SELECT U.alias
FROM Usuarios AS U, Partidas AS P1
WHERE U.uid = P1.uid AND
0 = (SELECT COUNT(*)
FROM PARTIDAS AS P2
WHERE P2.duración > P1.duración)
gnacrur commented 5 years ago

Hola @TamaraCucumides , quería saber si lo siguiente estaría bien: SELECT U.alias FROM Usuarios AS U, Partidas AS P1 WHERE U.uid = P1.uid AND P.duracion > ALL (SELECT P2.duracion FROM PARTIDAS AS P2)

chocopiano commented 5 years ago

En la 5 es valido poner: SELECT U.alias FROM Partidas P1 EXCEPT SELECT U1.alias FROM Partidas P2 WHERE P2.duracion>30

??

TamaraCucumides commented 5 years ago

Ojo que la tabla Partidas no posee los alias.

chocopiano commented 5 years ago

suponiendo que me pedían el uid en vez del alias, estaba bien lo anterior o no?