UTNianos

Versión completa: [APORTE] Final Gestión de Datos 26/07/2016
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas,

les dejo el final de gdd que tomaron hoy, alguien lo pudo conseguir y le saque foto. Creo que la teoría era bastante accesible y el primero de la parte práctica también (a mi particularmente me confunde el 3b). Dieron los 5 minutos para verlo e irse.
Saludos!



[img][Imagen: t5ga5f.png][/img]
Buenas !
La practica :
Detecte dos errores...
En la condicion where el count(*)> no va.. va en el having. Having count(*)> valor
y lo que esta en el having eso no va sino que va en el where ,no?

De que manera se puede hacer mas performante?? ese tipo de cosas no las se. Ideas?
Hm... no puedo ver la imagen.
Alguno sería tan amable de subirla nuevamente?.
(27-07-2016 09:32)Diesel escribió: [ -> ]Buenas !
La practica :
Detecte dos errores...
En la condicion where el count(*)> no va.. va en el having. Having count(*)> valor
y lo que esta en el having eso no va sino que va en el where ,no?

De que manera se puede hacer mas performante?? ese tipo de cosas no las se. Ideas?

Te falto la del GROUP BY, faltaba agregar un campo. Y la que la mayoría se comió fue que faltaba el ON en el JOIN, o sea la condición del WHERE iba en el join. Y después no estoy seguro pero puse que en el SELECT del HAVING no esta necesario poner ese ORDER BY
Bueno...
Van los errores de la query:

1/. Falta el ON en el INNER JOIN entre las tasblas.
2/. El Count(*) va en el having
3/. Falta agregar al group by t1.col1
3/ No es necesariamente un error de sintaxis, pero el IN puede ir en el Where y no necesariamente en el having (incluso es mas "perfomante").

Query Performante:



SELECT T1.ID, T1.COL1 + T1.COL2, COUNT(T2.T3_ID)
FROM T1 INNER JOIN T2
ON T1.ID = T2.ID AND EXISTS (SELECT 1 FROM T3 FROM T3.ID = T1.ID)
GROUP BY T1.ID, T1.COL1, T1.COL2
HAVING COUNT(1) > 1


Eso es lo más "performante" que se puede hacer la consulta SQL con los conocimientos que se pueden adquirir en gestión.
Luego se puede hacer mejor agregando nolock a las tablas para que no se bloqueen, forzar uso de indices a las columnas, etc etc.
(27-07-2016 15:43)Martin. escribió: [ -> ]Van los errores de la query:

1/. Falta el ON en el INNER JOIN entre las tasblas.
2/. El Count(*) va en el having
3/. Falta agregar al group by t1.col1
3/ No es necesariamente un error de sintaxis, pero el IN puede ir en el Where y no necesariamente en el having (incluso es mas "perfomante").

Agrego una 4/. La clausula ORDER BY no es válida en subconsultas, asi que hay que sacarlo también para que funcione la consulta original.


(27-07-2016 15:43)Martin. escribió: [ -> ]


... (SELECT 1 FROM T3 FROM T3.ID = T1.ID)
...


Puede ser que esto sea: SELECT 1 FROM T3 ON T3.ID = T1.ID
(22-09-2016 17:36)speedy10 escribió: [ -> ]
(27-07-2016 15:43)Martin. escribió: [ -> ]Van los errores de la query:

1/. Falta el ON en el INNER JOIN entre las tasblas.
2/. El Count(*) va en el having
3/. Falta agregar al group by t1.col1
3/ No es necesariamente un error de sintaxis, pero el IN puede ir en el Where y no necesariamente en el having (incluso es mas "perfomante").

Agrego una 4/. La clausula ORDER BY no es válida en subconsultas, asi que hay que sacarlo también para que funcione la consulta original.


(27-07-2016 15:43)Martin. escribió: [ -> ]


... (SELECT 1 FROM T3 FROM T3.ID = T1.ID)
...


Puede ser que esto sea: SELECT 1 FROM T3 ON T3.ID = T1.ID

Seria Así: SELECT 1 FROM T3 WHERE T3.ID = T1.ID

Con respecto a que la query tenga la mejor performance, el exists no seria mejor ponerlo en el having... asi lo hace solo para los grupos que cumplen la condicion y no para todos los registros de la tabla T1...
no se q sera mas costoso si agrupar y despues descartar solo uno o descartar de a uno y no agrupar...
Paso mis respuestas, rindo mañana asi que espero estar rumbeado jajaj.

1 a) F
1 b) F

2 a) y b) esta en todos los apuntes que hay por aca

3 a)

Puse en el from el join esta mal falta el on y la igualdad, where no se pueden usar func de grupo, en el group by falta t2.t3_id, creo que en el select si sumas 2 cosas tenes que ponerlas entre ().

3b)

SELECT T1.ID, T1.COL1 + T1.COL2, COUNT(T2.T3_ID)
FROM T1 JOIN T2 ON T1.ID = T2.ID
WHERE T1.ID IN (SELECT 1 FROM T3 FROM T3.ID = T1.ID)
GROUP BY T1.ID, T1.COL1, T1.COL2
HAVING COUNT(*) > 1

Saludos
URLs de referencia