buen aporte!!! ya me estaba complicando en hacer la tarea
gracias
Como cuando crees que dominas Postgres y aparece esto. :O
En SQL Server
--CREARUNRANGODEVALORES[9;11]SELECTTOP119+ROW_NUMBER()OVER(PARTITIONBY1ORDERBYA.name)AS'Range'FROM syscolumns A, syscolumns B--UNIONDE2RANGOS(SELECTTOP9--[11;19]10+ROW_NUMBER()OVER(PARTITIONBY1ORDERBYA.name)AS'Range'FROM syscolumns A, syscolumns B)UNION(SELECTTOP11--[15;25]14+ROW_NUMBER()OVER(PARTITIONBY1ORDERBYA.name)AS'Range'FROM syscolumns A, syscolumns B)--INTERSECCIONDE2RANGOS(SELECTTOP9--[11;19]10+ROW_NUMBER()OVER(PARTITIONBY1ORDERBYA.name)AS'Range'FROM syscolumns A, syscolumns B)INTERSECT(SELECTTOP11--[15;25]14+ROW_NUMBER()OVER(PARTITIONBY1ORDERBYA.name)AS'Range'FROM syscolumns A, syscolumns B)--METODO3--RANGOCONUNASUBCONSULTAUSE[platzi]SELECT*FROM platzi.alumnosWHERE tutor_id IN(SELECTTOP119+ROW_NUMBER()OVER(PARTITIONBY1ORDERBYA.name)AS'Range'FROM syscolumns A, syscolumns B)GO/*
INTERSECCION ENTRE CARRERA_ID Y TUTOR_ID
*/SELECT carrera_id AS interseccion
FROM((SELECTDISTINCT carrera_id
FROM platzi.alumnos)INTERSECT(SELECTDISTINCT tutor_id
FROM platzi.alumnos))AS interseccion_ids
yo en dic 2022 jajajja
SELECT *
FROM platzi.alumnos
WHERE tutor_id = carrera_id;
Es lo que yo haría... no entiendo cuál es la necesidad de complicar las clases con queries complejas siendo que se pueden resolver algunos ejercicios de forma más sencilla.
++Selectores de rango++
Son especialmente útiles para utilizar en el WHERE statement.
SELECTint4range(1,20) @>3;
Esta consulta trae un entero pequeño y pregunta si el rango contiene al numero 3
SELECTnumrange(11,20)&&numrange(20.0,30.0);
Esta consulta trae un resultado booleano, ya que los && consultan entre los dos rangos de números de alta precisión si existen valores solapados entre ambos
SELECTLOWERint8range(15,25);
Simplemente trae el menor número del rango. Funciona igual con UPPER
SELECTint4range(10,20)*int4range(15,25);
Esta consulta trae el rango numérico que comparten ambos rangos
SELECT a.tutor_id,b.carrera_id
FROM alumnos as a
inner JOIN alumnos as b
ON a.tutor_id = b.carrera_id
group by a.tutor_id
order by a.tutor_id
No esta mal, pero la idea es que uses las functions en esta clase Martin.
Yo no conseguí hacerlo, y busque una alternativa para el int4range en mysql y no halle nada, dificilísimo migrar este query a MySQL.
Hola, ¿Cuál es la diferencia entre int4range y int8range? ¿Qué es lo que realmente hace cada uno?
Saludos,
La diferencia es que son distintos tipos de rango, por ejemplo:
int4range es el rango de un Integer
int8range es el rango de un bigint
Si quieres entender un poco más acerca de los rangos te dejo el enlace a la documentación acerca de rangos aquí
Hola, entendí que la tarea era traer todos los campos en común, así que este fue mi Query:
NOTA: Antes de realizar esto, verificar los rangos de cada una de las columnas, ya que pueden caer en el rango más amplio (en este caso el de “carrera_id” que es de 1 a 50) y traer lo que este contenga respecto al rango a comparar, en el caso de “tutor_id” que es de 1 a 30, entonces nos seguiría trayendo todos los datos de la tabla sin más.
Use este query y se me borro toda la base de datos, alguien sabe alguna forma de restaurar la base de datos a como estaba antes del DELETE, Gracias
DELETEFROM platzi.alumnosWHERE id IN(SELECT id FROM(SELECT id FROM(SELECTROW_NUMBER()OVER(PARTITIONBY nombre, apellido, email, colegiatura, fecha_incorporacion, carrera_id, tutor_id ORDERBY id ASC)AS row
FROM platzi.alumnos)AS duplicados
WHERE duplicados.row>1)AS duplicados_id);```
creo que tendras que cargar nuevamente los archivos .SQL que estan en el curso, aqui
Muchas gracias, si me llega pasar en la vida laboral hay alguna opción
Solución al reto de la clase anterior
WITH cte AS(SELECT id,ROW_NUMBER()OVER(PARTITIONBY nombre, apellido, email, colegiatura, fecha_incorporacion, carrera_id, tutor_id
ORDERBY id ASC)AS row
FROM platzi.alumnos)DELETEFROM platzi.alumnosUSING cte
WHERE platzi.alumnos.id= cte.idAND cte.row>1;
¿Cuantos borramos la tabla de alumnos? xD
Solución del reto:
WITH range_data AS (
SELECT
MIN(tutor_id) AS min_tutor,
MAX(tutor_id) AS max_tutor,
MIN(carrera_id) AS min_carrera,
MAX(carrera_id) AS max_carrera
FROM platzi.alumnos
)
SELECT
int4range(min_tutor, max_tutor) * int4range(min_carrera, max_carrera)
FROM range_data;
Hola, una pregunta sobre el reto anterior. Ese query nos borraria las 2 filas repetidas. Pero como se hace si quiero dejar una?
Hola, estuve haciendo un par de queries pero note que por ejemplo un range int4range(10,20) es una lista de 10 a 19. ¿Cómo podría hacer para incluir todos los valores sin necesariamente decirle (10,21)?
Siempre va a funcionar así con los rangos n,m = n hasta m-1
Existen otrar opciones distintas que te llevan al resultado, por ejemplo
SELECT*FROM platzi.alumnosWHERE tutor_id >10 and tutor_id <=20
o
SELECT*FROM platzi.alumnosWHERE tutor_id BETWEEN10AND20