-- El minimo (solo nombre)SELECTMIN(nombre)FROM alumnos;-- El minimo por id de tutor ordenados por IDSELECT tutor_id,MIN(nombre)FROM alumnos
GROUPBY tutor_id
ORDERBY tutor_id;
Gracias por la orientación
Tienes un error en el FROM, ya que es alumnos.platzi y considero que no sería necesario el SELECT tutor_id, si no directamente SELECT MIN(nombre)
Una versión para MySQL SIN utilizar las window function, en una ocasion me toco trabajar con una BD DB2 y había que ingeniarse siempre como hacerlo todo con Select y Sub Selects. Por si a alguien le sirve, es otra perspectiva mismo resultado.
SELECTCONCAT('[',MAX(A.carrera_id),' - ',MIN(A.carrera_id),']')ASRango_Id_InterseccionFROM(SELECT carrera_id
FROM platzi.alumnosWHERE carrera_id IN(SELECT tutor_id FROM platzi.alumnosGROUPBY tutor_id
)GROUPBY carrera_id
)ASA
Felicitaciones Adrián, por tu respuesta. Siempre es bueno contar con alternativas.
El reto se puede hacer con menos líneas de código y más directo sin subquerys así:
--Min por nombre
SELECTMIN(nombre)FROM platzi.alumnos--MIN por nombre y tutor
SELECT tutor_id,MIN(nombre)FROM platzi.alumnosGROUPBY tutor_id
ORDERBY tutor_id ASC;
Mi reto:
SELECTMIN(nombre)FROM platzi.alumnosGROUPBY nombre
ORDERBY nombre DESCSELECT tutor_id,MIN(nombre)FROM platzi.alumnosGROUPBY tutor_id
ORDERBY tutor_id DESC;```
Hola, para la primera es suficiente las dos primeras lineas.
SELECTMIN(nombre)FROM platzi.alumnos```
Mi respuesta
--minimo nombre de alumnos
SELECTMIN(nombre)FROM platzi.alumnos;--minimo nombre con id de tutor
SELECT tutor_id,MIN(nombre)FROM platzi.alumnosGROUPBY tutor_id;
cual es la diferencia entre limit y max?
- MAX: se utiliza para obtener el valor máximo de una columna específica en una tabla. Devuelve un solo valor, que es el mayor de todos los valores en esa columna.
- LIMIT: se utiliza para limitar el número de filas devueltas en el resultado de una consulta. No necesariamente devuelve el valor máximo, sino que limita la cantidad de filas que se muestran.
Hola adicionalmente al reto platzi, me tomé el siguiente reto personal:
/* Reto Personal: El estudiante que se matriculó de ultimo en cada carrera*/SELECT*FROM(SELECTDISTINCTMAX(fecha_incorporacion)as t, carrera_id
FROM platzi.alumnosAS a1
GROUPBY carrera_id
)AS seleccion
INNERJOIN platzi.alumnosON seleccion.t= fecha_incorporacion
ORDERBY alumnos.carrera_id;
Me gustó tu reto.
Lo hice y este es mi código para llegar al mismo resultado.
SELECT*FROM platzi.alumnosAS a
INNERJOIN(SELECT carrera_id,MAX(fecha_incorporacion)AS ultima_incorporacion
FROM platzi.alumnosGROUPBY carrera_id
--ORDERBY carrera_id
)AS u ON a.fecha_incorporacion= u.ultima_incorporacionORDERBY a.carrera_id;
Interesante reto.
También me entró la curiosidad por hacerlo. Aquí mi resultado.
SELECT*FROM platzi.alumnosWHERE fecha_incorporacion IN(SELECT fecha FROM(SELECT carrera_id,MAX(fecha_incorporacion)AS fecha
FROM platzi.alumnosGROUPBY carrera_id ORDERBY carrera_id
)ASDATO)
17. Eres lo máximo
SELECT fecha_incorporacion
FROM platzi.alumnos
ORDERBY fecha_incorporacion DESCLIMIT1;SELECT carrera_id,MAX(fecha_incorporacion)FROM platzi.alumnos
GROUPBY carrera_id
ORDERBY carrera_id;-- RETOSELECTMIN(nombre)AS nombre_minimo
FROM platzi.alumnos;SELECTMIN(nombre)AS nombre_minimo, tutor_id
FROM platzi.alumnos
GROUPBY tutor_id;
El Problema de la Precisión 🧐
Cuando agrupamos por una columna TIMESTAMP (que tiene horas, minutos, segundos, etc.), cada registro es casi único. Por ejemplo, si dos personas se inscriben en el mismo segundo, el TIMESTAMP puede ser ligeramente diferente, haciendo que la tabla se vea así:
Si intentamos agrupar por esa columna, no obtendremos ningún resumen útil.
La Solución Mágica ✨
Para resolver esto, debemos agrupar solo por la columna que nos interesa (carrera_id) y usar la función MAX() en la fecha. Esta función se encarga de encontrar el valor más reciente dentro de cada grupo.
SELECT carrera_id
,MAX(fecha_incorporacion)AS ultima_fecha_de_incorporacion
FROM platzi.alumnosGROUPBY carrera_id
ORDERBY carrera_id ASC;
¿Qué hace este "hechizo"?
GROUP BY carrera_id: Le dice a la base de datos que agrupe todas las filas que tienen el mismo carrera_id.
MAX(fecha_incorporacion): Encuentra la fecha más reciente dentro de cada uno de esos grupos.
¡Así, pasamos de tener un montón de fechas sin sentido a un resumen claro y valioso!
No entiendo bien que hace esta consulta, agrupa primero por carrera y de ahi por fecha, porque las carrera_id salen varias y no salen en orden por carrera_id?
SELECT carrera_id, fecha_incorporacion
FROM platzi.alumnos
GROUP BY carrera_id, fecha_incorporacion
ORDER BY fecha_incorporacion DESC;
Lo que hace es que busca las columnas de carrera_idy fecha_incorporacionde la tabla platzi.alumnos agrupando ambas columnas y al final ordenandolos de forma descendente por fecha_incorporacion.
¿Por qué en la solución del reto crea subqueries? Entiendo que no hay 1 sola manera de llegar al resultado, pero no es más fácil hacerlo tipo:
SELECTint4range(MIN(tutor_id),MAX(tutor_id))*int4range(MIN(carrera_id),MAX(carrera_id))AS inter
FROM alumnos;
👾
Estaba intentando cumplir el reto y me desvie, termine buscando las filas que contenian el mismo nombre y el mismo tutor_id, les dejo la query quiza a alguien le parece interesante o encuentra una mejor manera de realizarla!
SELECT nombre, tutor_id, id
FROM platzi.alumnosWHERE id IN(SELECT id FROM(SELECT id,ROW_NUMBER()OVER(PARTITIONBY nombre, tutor_id
ORDERBY nombre ASC)AS row
FROM platzi.alumnos)AS id_duplicates
WHERE row >1)ORDERBY nombre, tutor_id, id;
--El minimo nombre que existe en nuestra tabla
SELECTMIN(nombre)AS nombre_alumnos
FROM platzi.alumnos;--El minimo por id de tutor ordenados
SELECT tutor_id AS tutor,MIN(nombre)AS nombre_alumno
FROM platzi.alumnosGROUPBY tutor_id
ORDERBY tutor_id;
Desafío:
--Reto: extraer el minimo nombre, alfabeticamente, que existe en nuestra tabla
-- de toda la tabla y el minimo por id de tutor
--Nombre mínimo alfabeticamente hablando
SELECT nombre
FROM platzi.alumnosORDERBY nombre
LIMIT1;--Nombre mínimo alfabeticamente hablando por tutor_id
SELECT tutor_id,MIN(nombre)FROM platzi.alumnosGROUPBY tutor_id
ORDERBY tutor_id;
Mis respuestas:
SELECT tutor_id, nombre
FROM platzi.alumnosGROUPBY tutor_id, nombre
ORDERBY nombre DESC;SELECT tutor_id,MAX(nombre)FROM platzi.alumnosGROUPBY tutor_id
ORDERBY tutor_id;
/* Minimo nombre de toda la tabla */SELECTmin(nombre)FROM alumnos
/* Minimo por id de tutor */SELECT tutor_id,min(nombre)FROM alumnos
GROUPBY tutor_id
ORDERBY tutor_id
Mi solución :)
SELECTint4range(minimo_id, maximo_id)*int4range(min_tutor, max_tutor)FROM(SELECTmin(id)as minimo_id,max(id)as maximo_id,min(tutor_id)as min_tutor,max(tutor_id)as max_tutor
FROM platzi.alumnos)as min_max
MI reto
.-1
SELECT nombre
FROM platzi.alumnosORDERBY nombre
;```# .-2
```SELECTmin(nombre),tutor_id
FROM platzi.alumnosGROUPBY tutor_id
ORDERBY tutor_id
;