Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 1 votos - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Gestion de Datos] 6 FINALES (2018-2019) ¡RESUELTOS!
Autor Mensaje
manurocck Sin conexión
Pirata cordobés
Preparado para la batalla
*****

Ing. en Sistemas
Facultad Regional Córdoba

Mensajes: 91
Agradecimientos dados: 64
Agradecimientos: 178 en 36 posts
Registro en: Sep 2015
YouTube
Mensaje: #1
Star [Gestion de Datos] 6 FINALES (2018-2019) ¡RESUELTOS! Finales Gestión de Datos
¡ Qué tal UTNianos !


Se me está empezando a hacer un poco de costumbre hacer este tipo de posts, espero que les sirva


Acá los FINALES RESUELTOS :



- Si crees que algún final tiene un error dejá un comentario y lo modificamos
- Si tienen algún final que no esté incluido en algún pueden publicarlo o mandarlo por m.d así lo incluyo en el post



Saludos!


Edit: Aprobada el 4/12/2019 =D
Otros adjuntos en este tema
.jpg  3a.jpg ( 467,52 KB / 3199) por pablit
.jpg  3b.jpg ( 1,08 MB / 3184) por pablit
.jpg  IMG_20191204_234650_50p.jpg ( 1,34 MB / 3089) por pablit
.jpg  Screenshot_2.jpg ( 160,07 KB / 2333) por chrisgel15
.jpg  SQL1.jpg ( 145,42 KB / 3262) por Diesel

<< Que lindo post, me voy a sentar a leerlo >>

[Imagen: giphy.gif]
(Este mensaje fue modificado por última vez en: 15-12-2019 23:34 por manurocck.)
25-09-2019 23:52
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] manurocck recibio 23 Gracias por este post
Mauro_bilo (07-10-2019), Diesel (16-10-2019), pablit (18-11-2019), DrWily (01-12-2019), emilio_murray (06-12-2019), Franco211 (10-12-2019), nanohueso (15-12-2019), Soy (18-12-2019), Cubito (04-01-2020), fluxhn (03-02-2020), .-Fede-. (09-02-2020), chrisgel15 (18-02-2020), Danolo (25-02-2020), Franco123 (21-06-2020), TheBlackWolf (10-12-2020), nahuel_o (27-07-2021), Luchhoo7 (30-11-2021), Cordobes (28-11-2022), CeciliaaRocca (26-02-2023), carobaldino (04-03-2023), Zeke (07-03-2023), ezeaudi (28-06-2024), garank12 (12-09-2024)
Diesel Sin conexión
Profesor del Modulo A
me recibi !!! 25/10/2023
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 201
Agradecimientos dados: 178
Agradecimientos: 355 en 51 posts
Registro en: Sep 2012
Mensaje: #2
RE: [Gestion de Datos] Final 25/09/2019, 26/02/2019 ¡RESUELTOS!
Buenas !
Con respecto al final de 25 de septiembre de 2019
Me animé a hacer el 3a de otra forma SIN QUE SEA CONSULTA aclaro... mas o menos parecida a la resolución.
Algun crack en SQL me lo verifica?? gracias!




Declare @MenorMonto int
Set @MenorMonto =(select top 1 sum (b.totalApostado)
from caballo b, carreras s where s.idCarrera=b.idCarrera group by b.numeroCaballo order by 1 asc)
-- aca saque la menor cantidad de guita que recibio un caballo en todas las carreras en todas las apuestas.


select a.nombreCaballo
from caballos a , carreras c
where
c.idCarrera=a.idCarrera and
a.puesto=1 and -- aca me doy cuenta que estoy filtrando puesto 1 y en el sum del total de dinero tmb se va a aplicar asi que ¿esta mal?
c.fecha=GETDATE()
group by a.nombreCaballo
Having SUM(a.totalApostado)=@MenorMonto

(Este mensaje fue modificado por última vez en: 16-10-2019 16:02 por Diesel.)
16-10-2019 15:47
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
manurocck Sin conexión
Pirata cordobés
Preparado para la batalla
*****

Ing. en Sistemas
Facultad Regional Córdoba

Mensajes: 91
Agradecimientos dados: 64
Agradecimientos: 178 en 36 posts
Registro en: Sep 2015
YouTube
Mensaje: #3
RE: [Gestion de Datos] Final 25/09/2019, 26/02/2019 ¡RESUELTOS!
(16-10-2019 15:47)Diesel escribió:  Buenas !
Con respecto al final de 25 de septiembre de 2019
Me animé a hacer el 3a de otra forma SIN QUE SEA CONSULTA aclaro... mas o menos parecida a la resolución.
Algun crack en SQL me lo verifica?? gracias!

Cómo te va Diesel, calculo que funciona también. Comparando las diferencias entre las consultas me di cuenta de que lo que hiciste fue aislar la subquery del HAVING para asignarle el valor a una variable.

Lo que sí, muchas veces te piden que lo hagas todo en solo una consulta, sin funciones auxiliares ni otras cosas. No se si te dirían algo por hacer eso o no.. Yo entre las dos me arriesgaría por la primera por las dudas (aunque den el mismo resultado)

Saludos!

<< Que lindo post, me voy a sentar a leerlo >>

[Imagen: giphy.gif]
16-10-2019 19:33
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] manurocck recibio 1 Gracias por este post
Diesel (17-10-2019)
Diesel Sin conexión
Profesor del Modulo A
me recibi !!! 25/10/2023
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 201
Agradecimientos dados: 178
Agradecimientos: 355 en 51 posts
Registro en: Sep 2012
Mensaje: #4
RE: [Gestion de Datos] Final 25/09/2019, 26/02/2019 ¡RESUELTOS!
(16-10-2019 19:33)manurocck escribió:  
(16-10-2019 15:47)Diesel escribió:  Buenas !
Con respecto al final de 25 de septiembre de 2019
Me animé a hacer el 3a de otra forma SIN QUE SEA CONSULTA aclaro... mas o menos parecida a la resolución.
Algun crack en SQL me lo verifica?? gracias!

Cómo te va Diesel, calculo que funciona también. Comparando las diferencias entre las consultas me di cuenta de que lo que hiciste fue aislar la subquery del HAVING para asignarle el valor a una variable.

Lo que sí, muchas veces te piden que lo hagas todo en solo una consulta, sin funciones auxiliares ni otras cosas. No se si te dirían algo por hacer eso o no.. Yo entre las dos me arriesgaría por la primera por las dudas (aunque den el mismo resultado)

Saludos!


Asi es manu ! Tenes razon aislé el having de la query. También entregaría la query en lugar del procedure.

Ya que te metiste a pensarlo nuevamente conmigo te hago una consulta.
Ves la nota que puse en le filtro "where"?? Filtramos por puesto 1. Y luego hacemos el SUM... pero al hacer el SUM estamos haciendo el SUM de las carreras que obtuvo el primer puesto ese caballo... o sea la cantidad de guita que recibió en apuestas solamente para la fecha y para el primer puesto... eso no esta medio mal ?? porque en el ejercicio te pedía la cantidad de guita q haya sacado el caballo en apuestas sin importar q haya sido en primeros puestos digamos y que esa guita sea la menor que se apostó ever... o sea como que habria que anidar todo el resultado y LUEGO hacer el filtro del primer puesto y la fecha... o no?
Si no se entiende reformulo xD
Gracias de nuevo!
17-10-2019 08:35
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Diesel recibio 1 Gracias por este post
manurocck (17-10-2019)
manurocck Sin conexión
Pirata cordobés
Preparado para la batalla
*****

Ing. en Sistemas
Facultad Regional Córdoba

Mensajes: 91
Agradecimientos dados: 64
Agradecimientos: 178 en 36 posts
Registro en: Sep 2015
YouTube
Mensaje: #5
RE: [Gestion de Datos] Final 25/09/2019, 26/02/2019 ¡RESUELTOS!
(17-10-2019 08:35)Diesel escribió:  Ya que te metiste a pensarlo nuevamente conmigo te hago una consulta.
Ves la nota que puse en le filtro "where"?? Filtramos por puesto 1. Y luego hacemos el SUM... pero al hacer el SUM estamos haciendo el SUM de las carreras que obtuvo el primer puesto ese caballo... o sea la cantidad de guita que recibió en apuestas solamente para la fecha y para el primer puesto... eso no esta medio mal ?? porque en el ejercicio te pedía la cantidad de guita q haya sacado el caballo en apuestas sin importar q haya sido en primeros puestos digamos y que esa guita sea la menor que se apostó ever... o sea como que habria que anidar todo el resultado y LUEGO hacer el filtro del primer puesto y la fecha... o no?
Si no se entiende reformulo xD
Gracias de nuevo!

Creo que tenés razón .. Tal vez se podría solucionar reemplazando el SUM por otra subquery que calcule el total de apuestas del caballo sin importar el puesto en el que salió



SELECT cb.nombreCaballo
FROM Caballos cb JOIN Carreras cr ON (cb.idCarrera = cr.idCarrera)
WHERE cb.puesto = 1 AND DAY (cr.fecha) = DAY ( GETDATE() )
GROUP BY cb.nombreCaballo
HAVING (SELECT SUM(cb3.totalApostado
FROM Caballos cb3
WHERE cb3.nombreCaballo = cb.nombreCaballo
GROUP BY cb3.nombreCaballo ) =
(SELECT TOP 1 SUM(cb2.totalApostado)
FROM Caballos cb2
GROUP BY cb2.nombreCaballo
ORDER BY SUM(cb2.totalApostado) asc)
ORDER BY SUM (cb.totalApostado) asc


Qué te parece?

<< Que lindo post, me voy a sentar a leerlo >>

[Imagen: giphy.gif]
17-10-2019 14:35
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] manurocck recibio 1 Gracias por este post
Diesel (17-10-2019)
Diesel Sin conexión
Profesor del Modulo A
me recibi !!! 25/10/2023
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 201
Agradecimientos dados: 178
Agradecimientos: 355 en 51 posts
Registro en: Sep 2012
Mensaje: #6
RE: [Gestion de Datos] Final 25/09/2019, 26/02/2019, 12/02/2019 ¡RESUELTOS!
(17-10-2019 14:35)manurocck escribió:  
(17-10-2019 08:35)Diesel escribió:  Ya que te metiste a pensarlo nuevamente conmigo te hago una consulta.
Ves la nota que puse en le filtro "where"?? Filtramos por puesto 1. Y luego hacemos el SUM... pero al hacer el SUM estamos haciendo el SUM de las carreras que obtuvo el primer puesto ese caballo... o sea la cantidad de guita que recibió en apuestas solamente para la fecha y para el primer puesto... eso no esta medio mal ?? porque en el ejercicio te pedía la cantidad de guita q haya sacado el caballo en apuestas sin importar q haya sido en primeros puestos digamos y que esa guita sea la menor que se apostó ever... o sea como que habria que anidar todo el resultado y LUEGO hacer el filtro del primer puesto y la fecha... o no?
Si no se entiende reformulo xD
Gracias de nuevo!

Creo que tenés razón .. Tal vez se podría solucionar reemplazando el SUM por otra subquery que calcule el total de apuestas del caballo sin importar el puesto en el que salió






SELECT cb.nombreCaballo
FROM Caballos cb JOIN Carreras cr ON (cb.idCarrera = cr.idCarrera)
WHERE cb.puesto = 1 AND DAY (cr.fecha) = DAY ( GETDATE() )
GROUP BY cb.nombreCaballo
HAVING (SELECT SUM(cb3.totalApostado
FROM Caballos cb3
WHERE cb3.nombreCaballo = cb.nombreCaballo
GROUP BY cb3.nombreCaballo ) =
(SELECT TOP 1 SUM(cb2.totalApostado)
FROM Caballos cb2
GROUP BY cb2.nombreCaballo
ORDER BY SUM(cb2.totalApostado) asc)
ORDER BY SUM (cb.totalApostado) asc


Qué te parece?


Testeado y funciona! muy bien.



CREATE TABLE CABALLOS (
idCarrera int,
numeroCaballo int not null,
NombreCaballo varchar(20) not null,
Puesto int,
totalApostado int not null,
CONSTRAINT FK_idCarrera FOREIGN KEY (idCarrera) REFERENCES CARRERAS (idCarrera)
);

CREATE TABLE CARRERAS (
idCarrera int ,
fecha date not null,
numeroCarrera int not null,
CONSTRAINT PK_User_SL PRIMARY KEY(idCarrera)
);

select * from CARRERAS

INSERT INTO CARRERAS (idCarrera,fecha,numeroCarrera) VALUES (2,'15/10/2019',243)
INSERT INTO CARRERAS (idCarrera,fecha,numeroCarrera) VALUES (3,'14/10/2019',246)

INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (2,99,'ROCKY',1,50)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (3,99,'ROCKY',10,50)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (2,88,'RYAN',2,300)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (3,88,'RYAN',5,500)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (2,77,'PEPE',3,800)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (2,66,'COCO',4,700)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (2,55,'BLUE',5,7000)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (2,40,'MIRKO',6,9000)

INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (2,44,'POBRETON',99,20)
INSERT INTO CABALLOS (idCarrera,numeroCaballo,NombreCaballo,Puesto,totalApostado) VALUES (3,44,'POBRETON',99,400)




En el Having no tiene sentido poner MENOR IGUAL dado que siempre va a tener que ser igual.
Si yo agrego un caballo que se llama "pobreton" al cual le apostamos menos que a "ROCKY" (el cual salio primero) y le apostaron "POCO" entonces la query no va a traer nada... porque POBRETON tendria le menor apuesta y lo que le apostaorn a rocky es mayor.
Si le agregamos 400 a pobreton entonces ahi sobrepasa a rocky, teniendo asi rocky lo menor apostado y devolviendo ESE valor en el having.. es como que el having dice "este caballo que salio primero posee lo menor que se le aposto en la vida del sistema?" y si la respuesta es "si" entonces lo devuelve en la consulta.
Le borré el filtor del dia asi funcionaba =D
abrazo.




Edit: Aprobada el dia 11/12/19 !!!!! gracias Pablit por tu resumen y Manurocck !
19 finales de practica me hice. No se lo deseo a nadie.


Archivo(s) adjuntos Imagen(es)
   
(Este mensaje fue modificado por última vez en: 17-12-2019 19:31 por Diesel.)
17-10-2019 15:34
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Diesel recibio 2 Gracias por este post
manurocck (17-10-2019), nanohueso (16-12-2019)
pablit Sin conexión
Presidente del CEIT
Tortuga marítima
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.087
Agradecimientos dados: 325
Agradecimientos: 1.509 en 147 posts
Registro en: Apr 2010
Mensaje: #7
RE: [Gestion de Datos] Final 25/09/2019, 26/02/2019, 12/02/2019 ¡RESUELTOS!
Hola gente, yo lo rendí en Septiembre y no llegué a los 6 puntos (4,5 sumé).


Respecto del 3a, lo había hecho así:
   

Corrigiendo errores, entiendo que el código debería haber sido algo así:

SELECT cab.NombreCaballo
FROM carreras car JOIN caballos cab ON (car.IdCarrera = cab.IdCarrera)
WHERE car.Fecha = GETDATE()
AND cab.Puesto = 1
AND cab.TotalApostado = (SELECT MIN(cab2.TotalApostado)
FROM caballos cab2
GROUP BY cab2.IdCarrera, cab2.NumeroCaballo)



Creo que estaría bien... ¿cómo lo ven ustedes?

Ya que estoy, dejo el 3b donde me calificaron con 0,5 puntos (de 2)...

   

Hay 2 cosas que no entiendo sobre las correcciones...

1. El INSERT está tachado, dando a antender que el trigger actuará solament ante un UPDATE.
¿Por qué el INSERT estaría mal?

2. Dentro del WHILE, en la parte del UPDATE, en un IF me indicaron que "era validación".
¿A qué se refieren con eso?

Viva Perón.
(Este mensaje fue modificado por última vez en: 18-11-2019 15:19 por pablit.)
18-11-2019 15:03
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
xavi82 Sin conexión
Profesor del Modulo A
Sin estado :(
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 322
Agradecimientos dados: 466
Agradecimientos: 157 en 81 posts
Registro en: Feb 2012
Mensaje: #8
RE: [Gestion de Datos] Final 25/09/2019, 26/02/2019, 12/02/2019 ¡RESUELTOS!
Hola pablit,

para mi el tema es que el enunciado dice que la ejecucion del objeto a desarrollar depende del valor NO NULO del campo Puesto, por lo que si es no nulo el registro ya existe y tiene un valor asignado, entonces que Puesto sea no nulo es una precondicion (por eso lo de validacion entiendo) y te tachan el insert porque seria en el caso de un UPDATE que deberias ejecutarlo.

Saludos!
18-11-2019 16:17
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] xavi82 recibio 1 Gracias por este post
pablit (21-11-2019)
pablit Sin conexión
Presidente del CEIT
Tortuga marítima
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.087
Agradecimientos dados: 325
Agradecimientos: 1.509 en 147 posts
Registro en: Apr 2010
Mensaje: #9
RE: [Gestion de Datos] Final 25/09/2019, 26/02/2019, 12/02/2019 ¡RESUELTOS!
(18-11-2019 16:17)xavi82 escribió:  Hola pablit,

para mi el tema es que el enunciado dice que la ejecucion del objeto a desarrollar depende del valor NO NULO del campo Puesto, por lo que si es no nulo el registro ya existe y tiene un valor asignado, entonces que Puesto sea no nulo es una precondicion (por eso lo de validacion entiendo) y te tachan el insert porque seria en el caso de un UPDATE que deberias ejecutarlo.

Saludos!

(Siempre hablando del 3b...)

Entiendo lo que decís y creo que sí, está bien, tiene sentido que así sea.


Ahora bien, no me cierra por qué está mal pensar en un INSERT y bien en un UPDATE =(
El enunciado indica que "en la actualidad dicha regla se cumple y que la BD es accedida por n aplicaciones de diferentes tipos y tecnologías".
¿Cómo te das cuenta si es un INSERT o un UPDATE en ese caso? Hay casos donde me doy cuenta enseguida, porque me parecen claros, pero acá no...

Viva Perón.
(Este mensaje fue modificado por última vez en: 21-11-2019 20:37 por pablit.)
21-11-2019 20:34
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
pablit Sin conexión
Presidente del CEIT
Tortuga marítima
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.087
Agradecimientos dados: 325
Agradecimientos: 1.509 en 147 posts
Registro en: Apr 2010
Mensaje: #10
RE: [Gestion de Datos] 5 FINALES (2018-2019) ¡RESUELTOS!
Subo el final que tomaron hoy, 4/12:

   


Y ya que estoy acerco las respuestas, que creo que están bien:

1.
- a. FALSO. Si bien es cierto que no puede almacenar valores repetidos, UNIQUE sí puede almacenar un NULL (uno solo, más no).
- b. VERDADERO. Hashing es más performante que el árbol-B para búsquedas directas o accesos directos.

2.
Tanto para el a. como para el b. recomiendo [autobombo]mi resumen teórico[/autobombo], donde está desarrollado lo que piden acá:
- a. Objetos de BD que garanticen la integridad: triggers, vistas, índices... con desarrollar 2 de esos ya estaría (está todo en el resumen).
- b. Sobre los niveles de aislamiento, bueno, marcar las diferencias entre el Uncommitted Read, el Committed Read, el Repeatable Read y el Serializable Read... contando el asunto de las lecturas sucias, las lecturas no repetibles y las lecturas fantasmas (está todo en el resumen).

3.
- a. OPCIÓN 3: Devuelve un conjunto vacío de datos porque como no hay datos en al tabla DEPOSITO es imposible que esa tabla tenga algún dato en común con la tabla PRODUCTOS.
- b. La solución brindada es incorrecta. Para hacer cambios en la BD, no puedo usar funciones (las funciones no pueden hacer cambios en la base de datos!). Debería haber usado un stored procedure. Los cambios a hacer serían los siguientes: (1) cambiar el function por el procedure; (2) eliminar el returns bit; y, si no me olvido de nada más (3) eliminar el RETURN 1 que aparece abajo.

Gracias a manurocck por el dato del 3.b.

Viva Perón.
(Este mensaje fue modificado por última vez en: 05-12-2019 00:24 por pablit.)
05-12-2019 00:15
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] pablit recibio 5 Gracias por este post
Diesel (05-12-2019), manurocck (05-12-2019), emilio_murray (06-12-2019), Franco211 (10-12-2019), nanohueso (15-12-2019)
nanohueso Sin conexión
Profesor del Modulo A
Thats what she said
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 239
Agradecimientos dados: 269
Agradecimientos: 30 en 20 posts
Registro en: Feb 2012
Mensaje: #11
RE: [Gestion de Datos] 6 FINALES (2018-2019) ¡RESUELTOS!
En el final del 17 de Julio de 2018,

El ejercicio 3.a) para mi la opcion correcta es la B.

Hace un join entre EMPRESA y AREAS . Ahi ya tenes si o si las empresas con sus areas. Si una empresa no tiene area, entonecs no va a estar en el resultado de ese join.
Luego, hacemos un left join con EMPLEADOS, lo que va a pasar es que si un area no tiene empleados, la columna va a quedar en null. Al hacer count(em.empresa_id) va a contabilizarlo como 0.

El 3.b) me hace ruido el left join que haces entre empresa y empleado. Si bien esta la fk, esta punteando la relacion con area.
Yo lo hice asi:

select e.id_empresa,count(distinct(area.id_area)),count(e.cuit)
from empresa e join area on (area.id_empresa = e.id_empresa) // me quedo con las empresa que tengan areas
join empleado emp on (area.id_area = emp.id_area and area.id_empresa = emp.id_empresa) // multiplico x empleado
where e.id_empresa not in ( select area.id_empresa
from area a1 join empleado e1 on (a1.id_area = e1.id_area and a1.id_empresa = e1.id_empresa)
group by area.id_area,area_id.empresa
having empleados > 10
) // de todas esas filas empresa-area-empleado, me quedo solamente con aquellas empresas que no tengan areas con mas de 10 empleados
group by e.id_empresa // luego al agrupar x empresa, cuento las areas distintas, y cuento con los cuits.



En el final del 12 de Marzo:
El ejercicio 3a ) Concuerdo con la opcion II , yo reescribi la view sin el UNION:

Haciendo un left join me traigo todos los usuarios y en caso de matchear tmb sus ingresos. Dps agrupo x usuario y hago un case validando si es null o tomo el max()

select u.Nombre,u.Apellido, CASE WHEN i.Fecha IS NULL then u.FechaAlta ELSE max(i.Fecha)
USUARIOS u LEFT JOIN INGRESOS i ON ( u.IdUsuario = i.idUsuario)
group by u.Nombre,u.Apellido,u.FechaAlta


(25-09-2019 23:52)manurocck escribió:  ¡ Qué tal UTNianos !


Se me está empezando a hacer un poco de costumbre hacer este tipo de posts, espero que les sirva


Acá los FINALES RESUELTOS :

    2019 (últimos finales) :
  • 2018 :


- Si crees que algún final tiene un error dejá un comentario y lo modificamos
- Si tienen algún final que no esté incluido en algún pueden publicarlo o mandarlo por m.d así lo incluyo en el post



Saludos!


Edit: Aprobada el 4/12/2019 =D
(Este mensaje fue modificado por última vez en: 17-12-2019 21:55 por nanohueso.)
17-12-2019 19:25
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
marcos32 Sin conexión
Militante
.
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 81
Agradecimientos dados: 37
Agradecimientos: 36 en 11 posts
Registro en: Sep 2011
Mensaje: #12
RE: [Gestion de Datos] 6 FINALES (2018-2019) ¡RESUELTOS!
Otra solucion para el 3.b del final del 12/02/2019



select p.nombre, p.apellido, (select count(*) from persona x where x.su_padre_es = p.id) as hijos from persona p
where hijos > 0


17-12-2019 22:56
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
.-Fede-. Sin conexión
Profesor del Modulo A

*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 265
Agradecimientos dados: 85
Agradecimientos: 49 en 44 posts
Registro en: Nov 2011
Mensaje: #13
RE: [Gestion de Datos] 6 FINALES (2018-2019) ¡RESUELTOS!
(17-12-2019 19:25)nanohueso escribió:  En el final del 17 de Julio de 2018,

El ejercicio 3.a) para mi la opcion correcta es la B.

Hace un join entre EMPRESA y AREAS . Ahi ya tenes si o si las empresas con sus areas. Si una empresa no tiene area, entonecs no va a estar en el resultado de ese join.
Luego, hacemos un left join con EMPLEADOS, lo que va a pasar es que si un area no tiene empleados, la columna va a quedar en null. Al hacer count(em.empresa_id) va a contabilizarlo como 0.

El 3.b) me hace ruido el left join que haces entre empresa y empleado. Si bien esta la fk, esta punteando la relacion con area.
Yo lo hice asi:

select e.id_empresa,count(distinct(area.id_area)),count(e.cuit)
from empresa e join area on (area.id_empresa = e.id_empresa) // me quedo con las empresa que tengan areas
join empleado emp on (area.id_area = emp.id_area and area.id_empresa = emp.id_empresa) // multiplico x empleado
where e.id_empresa not in ( select area.id_empresa
from area a1 join empleado e1 on (a1.id_area = e1.id_area and a1.id_empresa = e1.id_empresa)
group by area.id_area,area_id.empresa
having empleados > 10
) // de todas esas filas empresa-area-empleado, me quedo solamente con aquellas empresas que no tengan areas con mas de 10 empleados
group by e.id_empresa // luego al agrupar x empresa, cuento las areas distintas, y cuento con los cuits.



En el final del 12 de Marzo:
El ejercicio 3a ) Concuerdo con la opcion II , yo reescribi la view sin el UNION:

Haciendo un left join me traigo todos los usuarios y en caso de matchear tmb sus ingresos. Dps agrupo x usuario y hago un case validando si es null o tomo el max()

select u.Nombre,u.Apellido, CASE WHEN i.Fecha IS NULL then u.FechaAlta ELSE max(i.Fecha)
USUARIOS u LEFT JOIN INGRESOS i ON ( u.IdUsuario = i.idUsuario)
group by u.Nombre,u.Apellido,u.FechaAlta


(25-09-2019 23:52)manurocck escribió:  ¡ Qué tal UTNianos !


Se me está empezando a hacer un poco de costumbre hacer este tipo de posts, espero que les sirva


Acá los FINALES RESUELTOS :

    2019 (últimos finales) :
  • 2018 :


- Si crees que algún final tiene un error dejá un comentario y lo modificamos
- Si tienen algún final que no esté incluido en algún pueden publicarlo o mandarlo por m.d así lo incluyo en el post



Saludos!


Edit: Aprobada el 4/12/2019 =D

Mire todos los comentarios justo para buscar alguien que haya comentado esto respecto al 3a del 17
La respuesta correcta estoy casi seguro que es la B (La C de entrada no puede ser porque es un LEFT JOIN, asi que no hace falta que la empresa tenga un empleado para salir en los resultados)

Respecto al del 12 de marzo:
El 3a lo hice igual usando un CASE para la fecha, pero me comi el LEFT JOIN, esta bien eso.

el 3b se me ocurrio hacerlo modificando la constraint de foreign key por ON DELETE CASCADE
(Este mensaje fue modificado por última vez en: 09-02-2020 23:18 por .-Fede-..)
09-02-2020 19:44
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nanohueso Sin conexión
Profesor del Modulo A
Thats what she said
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 239
Agradecimientos dados: 269
Agradecimientos: 30 en 20 posts
Registro en: Feb 2012
Mensaje: #14
RE: [Gestion de Datos] 6 FINALES (2018-2019) ¡RESUELTOS!
Del final del 25 de septiembre 2019:
El 3.b del trigger , no concuerdo con la resolucion. Igual pienso que es muy bardo lo que estan pidiendo y tampoco llegue a resolverlo todo.
El trigger es unicamente UPDATE porque dice que al momento de crearse la carrera se insertan los caballos con puesto null. Entonces una vez que se sucede la carrera, se updatean los caballos para setearle el puesto.
Ahora bien, para validar que los numeros sean consecutivos :
- caso I ) el triggger se ejecuta y en el update se esta actualizando un unico registro. Este caso es dentro de todo facil.
- caso II) el trigger se ejecuta y en el update se estan actualizando N registros. Esto lo complejiza porque tenes que validar que esa secuencia de puestos sean sucesivas. Y a su vez, hay que validar si esa secuencia en conjunto con las filas que estan en la tabla(-inserted) resultan en una secuencia consecutiva.

Aca dejo una solución parcial. El caso II no me puse a codearlo porque en SQL no termino mas.



CREATE TRIGGER unTrigger
ON [dbo].[CABALLOS]
INSTEAD OF UPDATE
AS
BEGIN
DECLARE @IdCarrera int
DECLARE @NumeroCaballo int
DECLARE @NombreCaballo nvarchar(20)
DECLARE @TotalApostado int
DECLARE @Puesto int
DECLARE @CantidadDeUpdates int

SET @CantidadDeUpdates = (select count(*) from inserted)
/*Si es un update de un unico puesto*/
IF (@CantidadDeUpdates = 1)
BEGIN
SET @IdCarrera = (SELECT inserted.idCarrera from inserted)
SET @Puesto = (SELECT inserted.puesto from inserted)

/*Si puesto < 1 => RAISERROR('Puesto invalido')*/
IF (@Puesto < 1)
BEGIN
RAISERROR('Puesto ingresado es invalido')
END
ELSE IF (@Puesto = 1)
BEGIN
DECLARE @CaballosConPuestoUno int
DECLARE @CaballosConPuestoDos int
DECLARE @PuestosCargados int

/*Si puesto = 1 => valido que todos sea nulls O que ya exista el 2 ( x si lo estan insertando de forma descendente)*/
SET @CaballosConPuestoUno = (select count(*) from [dbo].[CABALLOS] as cab where cab.idCarrera = @IdCarrera and cab.puesto = 1)
SET @CaballosConPuestoDos = (select count(*) from [dbo].[CABALLOS] as cab where cab.idCarrera = @IdCarrera and cab.puesto = 2)
SET @PuestosCargados = (select count(*) from [dbo].[CABALLOS] as cab where cab.idCarrera = @IdCarrera and cab.puesto is not null)

IF (@PuestosCargados > 0 AND (@CaballosConPuestoUno > 1 OR @CaballosConPuestoDos = 0))
BEGIN
RAISERROR('Ya existe un caballo con puesto 1 O no existe un caballo con puesto')
END
END
ELSE
BEGIN
--! Mas de un update
/*
SI hay mas de un update, entonces tengo que validar varias cosas:
- que todos los puestos que estan en inserted sean consecutivos ( esto puede ser costo algoritmicamente hablando )
- faltan mas validaciones seguramente...

*/
END
END





18-02-2020 19:44
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
chrisgel15 Sin conexión
Profesor del Modulo A
De Racing, Vago y Atorrante
*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 264
Agradecimientos dados: 448
Agradecimientos: 140 en 69 posts
Registro en: Jul 2010
Facebook
Mensaje: #15
RE: [Gestion de Datos] 6 FINALES (2018-2019) ¡RESUELTOS!
manurocck como estas?

El final practico del 26 de febrero de 2019, esta mal me parece.

Adjunte una imagen para mostrar que tanto el IF como el ELSE estan haciendo lo mismo.

   

En el ELSE solo se deberia arrojar una excepcion para avisar que la clave que se esta intentando insertar no existe.

Por otro lado, CREO que tambien faltaria un trigger para DELETE sobre ciudades, borrando en cascada sobre la tabla PERSONAS.

Saludos!
(Este mensaje fue modificado por última vez en: 24-02-2020 12:55 por chrisgel15.)
24-02-2020 12:52
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: