Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Final Gestión de Datos 10/2/15 con posible resolución
Autor Mensaje
roli93 Sin conexión
Empleado del buffet
Nuevo año, nuevos finales
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 20
Agradecimientos dados: 5
Agradecimientos: 36 en 9 posts
Registro en: Nov 2011
Facebook Twitter
Mensaje: #1
Lightbulb Final Gestión de Datos 10/2/15 con posible resolución Finales Gestión de Datos
Buenas!

Les traigo el final que me tomaron hoy en Gestión de Datos. Fue, según mi opinión, bastante fácil. No tengo una copia así que si alguien tiene agradeceré que la suba. Por lo pronto les dejo escrito qué tomaron (no me lo acuerdo textual, obvio):

VoF:

a) Como la carga de elementos en un árbol crece de manera exponencial, siempre los tiempos de búsqueda son de orden logarítmico (apoximadamente así era)

b) El árbol binario de búsqueda está implementado sobre un árbol principal derecho y balanceado.

Teoría. Contestar en no más de 10 renglones

1) Diferencias entre Funciones y Stored Procedures

2) Defina de forma clara y concisa OLAP DataWarehouse y Data Mining y cómo se relacionan entre sí.

Práctica

a)Se tiene una tabla de facturas :

num_factura (PK)
importe
num_cliente
anio
mes
dia

Anio es un campo int de 4 dígitos con el año, día y mes son char(2) y se completan con un cero a la izquierda para días y meses de un
[/code]solo dígito.
Se pide realizar una consulta SQL que dé como resultado un listado de los num_clientes y su importe total (sumado) de las facturas del
período en cuestión, ordenados por importe total.
Se debe tener en cuenta que el período en cuestión se cuenta de un año para atrás desde la fecha actual. Es decir que si la consulta se
hace el 26 de mayo de 2009 se deben tener en cuenta las facturas hasta desde el 26 de mayo del 2008 hasta el 26 de mayo del 2009.
Además sólo se deben contemplar aquellos clientes que también hayan comprado en el período anterior (entre 2 y 1 año atrás, en el
ejemplo anterior sería entre el 26 de mayo de 2007 y 26 de mayo de 2008) y que en el período en cuestión (desde hace un año al
presente, de 26 de mayo de 2008 a 26 de mayo de 2009 en el ejemplo) tengan más de 30 compras.

3) b) Dada la consulta

SELECT * FROM localidades, provincias

Sabiendo que provincias tiene 25 registros y localidades es una tabla vacía elegir la opción correcta y justificar:

I) Cancela al ejecutar la query
II) No trae registros
III) Trae 25 registros

--------------------------------------------

Posible resolución:


Les comento cómo resolví yo el examen, diez no me saqué así que algún error debe haber (sospecho del 2-a o el 3-a) pero no estuve demasiado lejos así que creo que mis respuestas son aceptablemente confiables.

1-a) Falso. Depende de como estén distribuidos los datos, si tomamos el ejemplo de un ABB donde los datos a cargar ya vienen
ordenados el arbol se convierte en una lista y el tiempo de búsqueda se hace lineal.

1-b) Falso. Un ABB esta implementad como un árbol principal derecho pero que esté o no balanceado depende de cómo se carguen los
datos (vale el mismo ejemplo del 1-a).

*Por la nota infiero que estos dos VoF están correctos.

2-a) (Resumido)Una función siempre devuelve un valor mientras que un SP no necesariamente, aunque la implementación lo puede
permitir. Un SP se ejecuta usando exec como una sentencia más, mientars que las funciones son asignadas a variables o utilizadas
dentro de un select (no puedo hacer eso último con un SP). Además un Sp tiene sentido que pueda tener un efecto perdurable en los
datos de la base mientras que esto no es así con una función.

2-b) (Aproximadamente)Los OLAP son On Line Analytic Processes, orientados a sujetos y temas, trabajan con datos poco normalizados,
sumarizados, grandes volúmenes de datos y se ultilizan en los altos niveles organizacionales. Los DW son bases unicas en una
organización compuestas por Data Marts que proveen información para la toma de decisiones. Acumulan datos de toda la organización
unificados, integrados, almacenados de forma multidimensional. se basan en los OLAP. El Data Minning consiste en usar estos datos para
descubrir patrones ocultos de comportamiento (tales como "Qué clientes tienen más probabilidades de aceptar otra tarjeta de crédito?")
mediante algoritmos de redes neuronales, vecino más cercano, reglas de inducción y árboles de decisión.

*Me costó un huevo tratar de resumir el 2b en "no más de 10 renglones". En ambos puntos usé 11 y 12 renglones, así que tampoco es tan estricta la cosa =P.

3-a)


SELECT num_cliente, SUM(ISNULL(importe,0)) FROM facturas f1
WHERE DATEDIFF(D,TO_DATE('dd/mm/yyyy', dia+'/'+mes+'/'+ CAST( anio AS CHAR(4))), GETDATE())<365
AND EXISTS ( SELECT 1 FROM FROM facturas f2 WHERE f1.num_cliente=f2.num_cliente
AND DATEDIFF(D,TO_DATE('dd/mm/yyyy', dia+'/'+mes+'/'+ CAST( anio AS CHAR(4))), GETDATE())
BETWEEN 366 AND 730)
GROUP BY num_cliente
HAVING COUNT(num_cliente)>30
ORDER BY 2



*Lo copié textual para que sea fiable, pero creo que me faltó aclarar de qué tabla eran los dia mes y anio (f2.dia , etc).
aparte seguro algún error de sintaxis o de alguna función mal usada debe haber jaj.

3-b)

III: No devuelve nada. Porque al no haber cláusulas de join implícito en el Where, realiza el producto cartesiano en el cuals e cumple que
dados dos conjuntos A y B |AxB|=|A|.|B| => si |B| = 0, |AxB|=|A|.0=0. Es decir, la cardinalidad del conjunto producto cartesiado es el
producto de las cardinalidades de los conjuntos originales, como uno de los dos tiene cardinalidad cero, el producto cartesiano tiene
cardinalidad cero.

-----------------------

Bueno, espero que les sirva. Avisen cualquier cosa =D

Saludos!
(Este mensaje fue modificado por última vez en: 11-02-2015 03:23 por roli93.)
11-02-2015 03:19
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] roli93 recibio 7 Gracias por este post
Jess (11-02-2015), eltipito (11-02-2015), gonnza (11-02-2015), agusbrand (11-02-2015), coolerking (15-02-2015), DarkCrazy (11-12-2015), takuma1985 (20-02-2017)
coolerking Sin conexión
Secretario de la SAE
estado' unido'
******

Análisis de Sistemas
Facultad Regional Buenos Aires

Mensajes: 481
Agradecimientos dados: 117
Agradecimientos: 89 en 50 posts
Registro en: Jan 2012
Mensaje: #2
RE: Final Gestión de Datos 10/2/15 con posible resolución
(11-02-2015 03:19)roli93 escribió:  

SELECT num_cliente, SUM(ISNULL(importe,0)) FROM facturas f1
WHERE DATEDIFF(D,TO_DATE('dd/mm/yyyy', dia+'/'+mes+'/'+ CAST( anio AS CHAR(4))), GETDATE())<365
AND EXISTS ( SELECT 1 FROM FROM facturas f2 WHERE f1.num_cliente=f2.num_cliente
AND DATEDIFF(D,TO_DATE('dd/mm/yyyy', dia+'/'+mes+'/'+ CAST( anio AS CHAR(4))), GETDATE())
BETWEEN 366 AND 730)
GROUP BY num_cliente
HAVING COUNT(num_cliente)>30
ORDER BY 2



Muchas gracias por el aporte, lo que note es que haces un count(num_cliente) y deberia ser de importe. Una boludes pero buen para sumar. Una pregunta... usaste TO_DATE, que es de pl_sql.... vos aclaras con que motor estas codificando en el final?
De donde estudiaste el tema de cardinalidades? Sugeris algun apunte?

Desde ya muchas gracias!

[Imagen: donacion1.jpg]
(Este mensaje fue modificado por última vez en: 15-02-2015 02:20 por coolerking.)
15-02-2015 02:04
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
roli93 Sin conexión
Empleado del buffet
Nuevo año, nuevos finales
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 20
Agradecimientos dados: 5
Agradecimientos: 36 en 9 posts
Registro en: Nov 2011
Facebook Twitter
Mensaje: #3
RE: Final Gestión de Datos 10/2/15 con posible resolución
Hice el count num_cliente porque tras la pregunta de alguien dijeron que agregáramos contemplar importes nulos, si el importe tenía null creo que no lo iba a contar. El num cliente no tenía sentido que fuera nunca null. No se me ocurre por que otro motivo podría estar mal, aclárame jaj. A mi me dio la impresión de q daba medio lo mismo lo que pusiera adentro del count jaj.

Si, use el to date porque no estaba seguro si con el cast tsql me lo tomaba o que función habia, y asumí que iban a entender la intención y no focalizar en el nombre de la función que uso. En el enunciado te piden aclarar el motor. Yo me olvide, y aparentemente no hubo consecuencias.

A que te referís con cardinalidsdes? Si es lo el ultimo punto, una vez recordado que eso hacia el producto cartesiano, el resto de la justificación, es Discreta jaj.
(Este mensaje fue modificado por última vez en: 15-02-2015 06:11 por roli93.)
15-02-2015 06:10
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] roli93 recibio 1 Gracias por este post
coolerking (15-02-2015)
Aoshido Sin conexión
Campeon del cubo Rubik
Tamashi no Kijitsu
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 136
Agradecimientos dados: 30
Agradecimientos: 74 en 21 posts
Registro en: Jul 2010
Mensaje: #4
RE: Final Gestión de Datos 10/2/15 con posible resolución
Buenas gente, dejo mi resolucion del 3er ejercicio, esparecida pero cambian algunas cosas.
Tambien dejo un esquema que hice en sqlfiddle.com para corroborarlo.

Spoiler: Mostrar


create table facturas(
num_factura int(8),
importe int(8),
num_cliente int(8),
anio int(4),
mes char(2),
dia char(2)
);

insert into facturas
values (1,100,1,2000,'07','01');

insert into facturas
values (2,140,1,2000,'08','01');

insert into facturas
values (3,150,1,2000,'09','01');

insert into facturas
values (4,130,1,2000,'10','01');

insert into facturas
values (5,130,1,2000,'11','01');

insert into facturas
values (6,120,1,2000,'12','01');

insert into facturas
values (7,100,2,2000,'07','01');

insert into facturas
values (8,100,2,2000,'08','01');

insert into facturas
values (9,100,1,1990,'07','01');

insert into facturas
values (10,100,1,1990,'08','01');

insert into facturas
values (11,100,1,1990,'09','01');



Tome en consideracion las siguientes cosas:
- El año en que se ejecuta la consulta es 2001,
- En vez de tener >30 compras en el periodo, que tengan >5



select
num_cliente,
sum(isnull(importe,0))
from
facturas
where
anio between 2000 and 2001
and num_cliente in
(select num_cliente from facturas
where anio between 1999 and 2000
group by num_cliente
having count(num_factura) >= 1)
group by
num_cliente
having
count(num_factura) > 5


(Este mensaje fue modificado por última vez en: 16-02-2015 19:55 por Aoshido.)
16-02-2015 19:53
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: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.