UTNianos

Versión completa: [Aporte] Final Gestión de Datos - 19/02/2020
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Bueno gente,

Con mucha felicidad comparto mi último final de la carrera que pude aprobar con un 7 el pasado 19/02/2020, y que preparó Lacquaniti. Todavía no puedo creer que no tengo que estudiar más.

Así que aún en la joda, les comparto el final y lo que hice en el mismo.

1a) y 1b) creo que fueron los puntos que hice mal. Creo que se pueden buscar con facilidad.

2a)

* Las funciones estan obligadas a retornar un valor
* Los SP's no están obligados a retornar ningún valor

* Las funciones pueden invocarse en el WHERE y en el FROM.
* Los SP's no puede invocar ni en el WHERE ni en el FROM.

* Las funciones NO pueden modificar ningún valor de alguna tabla de la base mediante INSERT, UPDATE o DELETE.
* Los SP's pueden modificar valores en las tablas.

2b) Hice el paso a paso del burbujeo, que consiste en N-1 pasadas donde los elementos se van comparando de a pares. Comenté que no era performante, y que era el peor de los métodos de ordenamiento.

Añadí también el MERGE SORT que me lo acordaba de memoria por algunos videos que vi en Youtube.

3a)
Consideren la imagen adjunta que muestra los registros en la tabla, porque fue lo que dibujé en el examen.


CREATE TABLE Numeros (
Clave INT PRIMARY KEY,
Valor INT
)

INSERT INTO Numeros VALUES (1, 1000)
INSERT INTO Numeros VALUES (2, 2000)
INSERT INTO Numeros VALUES (3, 3000)
INSERT INTO Numeros VALUES (4, 3000)
INSERT INTO Numeros VALUES (5, 3000)
INSERT INTO Numeros VALUES (6, null)
INSERT INTO Numeros VALUES (7, null)
INSERT INTO Numeros VALUES (8, null)

SELECT COUNT(Valor) FROM Numeros -- N
SELECT COUNT(Clave) FROM Numeros -- M

-- Se sabe que 0 < N < M < 5000

-- Como se pide indicar el dominio, de la siguiente consulta
SELECT COUNT(DISTINCT Valor) FROM Numeros

--Mirando la tabla, con los valores que inserte, se cumple que N < M,
-- Y ademas agregue unas filas en Valor repetidas (en este caso el 3000) se repite 3 veces

--Se sabe que el DISTINCT, elimina los repetidos, por lo tanto de tres filas iguales, el count devuelve 1

--Defino: I = Cantidad de filas repetidas en Numeros
--El dominio queda entonces:

0 < M - N - I + 1 < 5000


3b)


-- Para este otro punto insertamos algunas otras filas mas grandes.

INSERT INTO Numeros VALUES (4000, 3000)
INSERT INTO Numeros VALUES (5000, 3000)
INSERT INTO Numeros VALUES (6000, 2345)
INSERT INTO Numeros VALUES (7000, 2345)
INSERT INTO Numeros VALUES (8000, 2345)


SELECT TOP 5 N1.Clave FROM Numeros N1
WHERE N1.Clave IN (SELECT TOP 5 N2.Clave FROM Numeros N2 WHERE N2.Clave > 0 ORDER BY N2.Clave ASC)
UNION
SELECT TOP 5 N1.Clave FROM Numeros N1
WHERE N1.Clave IN (SELECT TOP 5 N2.Clave FROM Numeros N2 WHERE N2.Clave > 0 ORDER BY N2.Clave DESC)


Espero que les sirva che. Yo pude preparar la materia metiendole mucho huevo en una semana. Si tienen un poquito más de tiempo, creo que van a llegar más holgados incluso.

Saludos! Espero para cualquier duda
Mauro_bilo

Felicitaciones por aprobar y recibirte!!

Consulta, partiendo de aca:

-- Se sabe que 0 < N < M < 5000

Esto que pones esta bien?

0 < N - M - I + 1 < 5000

N - M daria negativo, o no?

Para mi el resultado seria: 0 < RESULTADO < N < M < 5000
(22-02-2020 21:16)chrisgel15 escribió: [ -> ]Mauro_bilo

Felicitaciones por aprobar y recibirte!!

Consulta, partiendo de aca:

-- Se sabe que 0 < N < M < 5000

Esto que pones esta bien?

0 < N - M - I + 1 < 5000

N - M daria negativo, o no?

Para mi el resultado seria: 0 < RESULTADO < N < M < 5000

Tiene razon señor, me confundí al escribirlo y no considerar los NULL's. Sería así:

0 < M - (M - N) - I + 1 < 5000

Donde en el caso del ejemplo sería:

M = 8
N = 5
I = 3
M - N = 3 ---> filas con Valor en NULL

Entonces: Count(distinct Valor) = 8 - (8 - 5) - 3 + 1 = 3

Decime que te parece ahora.
Mauro_bilo, como estas? Para mi sigue estando mal.

Por un lado, esta cuenta:

M - (M - N) - I + 1

Se simplifica...

M - M + N - I + 1

N - I + 1

Que para tu ejemplo sigue dando bien, pero solo porque repetiste un solo valor, el 3000.

Si repetis uno mas, el 2000 por ejemplo, ya no se cumple el tema del "+1". Ejemplo, repitiendo un valor mas:

M: 10
N: 6
I: 5 (Cantidad de filas repetidas son 5...tres veces el 3000, dos veces el 2000).

El resultado deberia dar igual (3).

Pero...

M - (M - N) - I + 1
10 - (10 - 6) - 5 + 1
10 - 4 - 5 + 1 = 2.
Da mal.

Eso es porque el +1 solo intenta "devolver" una fila cuando intentas quitar todas las repetidas de un caso.

Mi solucion propuesta:

I: Cantidad de filas efectivamente repetidas (si el 3000 esta 3 veces, I = 2. Si ademas esta repetido una vez el 2000, I = 3).

Y la respuesta seria

0 < N - I < N < M < 3000

Para tu primer caso es: 5 - 2 = 3 (se cumple)
y para mi segundo ejemplo es: 6 - 3 = 3 (se cumple)

Avisame!

Saludos
(23-02-2020 13:43)chrisgel15 escribió: [ -> ]Mauro_bilo, como estas? Para mi sigue estando mal.

Por un lado, esta cuenta:

M - (M - N) - I + 1

Se simplifica...

M - M + N - I + 1

N - I + 1

Que para tu ejemplo sigue dando bien, pero solo porque repetiste un solo valor, el 3000.

Si repetis uno mas, el 2000 por ejemplo, ya no se cumple el tema del "+1". Ejemplo, repitiendo un valor mas:

M: 10
N: 6
I: 5 (Cantidad de filas repetidas son 5...tres veces el 3000, dos veces el 2000).

El resultado deberia dar igual (3).

Pero...

M - (M - N) - I + 1
10 - (10 - 6) - 5 + 1
10 - 4 - 5 + 1 = 2.
Da mal.

Eso es porque el +1 solo intenta "devolver" una fila cuando intentas quitar todas las repetidas de un caso.

Mi solucion propuesta:

I: Cantidad de filas efectivamente repetidas (si el 3000 esta 3 veces, I = 2. Si ademas esta repetido una vez el 2000, I = 3).

Y la respuesta seria

0 < N - I < N < M < 3000

Para tu primer caso es: 5 - 2 = 3 (se cumple)
y para mi segundo ejemplo es: 6 - 3 = 3 (se cumple)

Avisame!

Saludos

Perfecto. Si posiblemente me situé en un solo ejemplo y quedó mal. Quizás podría haberse resuelto declarando otra variable, pero me parece bien como lo pensaste. Por suerte zafé por los otros... este se ve que lo tenía mal.

Gracias y éxitos en el examen.
URLs de referencia