Una pequeña correccion: en la descripcion del problema, en el primer item, en vez de decir que la tabla se llama teachers (en plural) dice que se llama teacher (en singular)
Bienvenida conceptos básicos y contexto histórico de las Bases de Datos
Bienvenida conceptos básicos y contexto histórico de las Bases de Datos
Playground: tu primera consulta en bases de datos
Introducción a las bases de datos relacionales
Qué son entidades y atributos
Historia de las bases de datos relacionales
Entidades de Platzi Blog
Relaciones
Múltiples muchos
Diagrama ER
Diagrama FÃsico: tipos de datos y constraints
Diagrama FÃsico: normalización
Formas normales en Bases de Datos relacionales
Diagrama FÃsico: normalizando Platziblog
RDBMS (MySQL) o cómo hacer lo anterior de manera práctica
¿Qué es RDB y RDBMS?
Instalación local de un RDBMS (Windows)
Instalación local de un RDBMS (Mac)
Instalación local de un RDBMS (Ubuntu)
Clientes gráficos
Servicios administrados
SQL hasta en la sopa
Historia de SQL
DDL create
Playground: CREATE TABLE
CREATE VIEW y DDL ALTER
DDL drop
Playground: VIEW, ALTER y DROP en SQL
DML
Playground: CRUD con SQL
¿Qué tan standard es SQL?
Creando Platziblog: tablas independientes
Creando Platziblog: tablas dependientes
Creando Platziblog: tablas transitivas
Consultas a una base de datos
¿Por qué las consultas son tan importantes?
Estructura básica de un Query
SELECT
Playground: SELECT en SQL
FROM y SQL JOINs
Utilizando la sentencia FROM
Playground: FROM y LEFT JOIN en SQL
WHERE
Utilizando la sentencia WHERE nulo y no nulo
Playground: Filtrando Datos con WHERE
GROUP BY
ORDER BY y HAVING
Playground: Agrupamiento y Ordenamiento de Datos
El interminable agujero de conejo (Nested queries)
¿Cómo convertir una pregunta en un query SQL?
Preguntándole a la base de datos
Consultando PlatziBlog
Playground: Prueba Final con PlatziBlog
Introducción a la bases de datos NO relacionales
¿Qué son y cuáles son los tipos de bases de datos no relacionales?
Servicios administrados y jerarquÃa de datos
Manejo de modelos de datos en bases de datos no relacionales
Top level collection con Firebase
Creando y borrando documentos en Firestore
Colecciones vs subcolecciones
Recreando Platziblog
Construyendo Platziblog en Firestore
Proyecto final: transformando tu proyecto en una db no relacional
Bases de datos en la vida real
Bases de datos en la vida real
Big Data
Data warehouse
Data mining
ETL
Business intelligence
Machine Learning
Data Science
¿Por qué aprender bases de datos hoy?
Bonus
Bases de datos relacionales vs no relacionales
Elegir una base de datos
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 148
Preguntas 3
Una pequeña correccion: en la descripcion del problema, en el primer item, en vez de decir que la tabla se llama teachers (en plural) dice que se llama teacher (en singular)
Les dejo mi analisis y solucion:
Tengo dos tablas:
(De lo anterior sabemos que courses.teacher_id y teachers .id son lo mismo, por lo que haremos un INNER JOIN hacioendo coincidir estos dos valores)
FROM teachers
INNER JOIN courses ON teachers.id = courses.teacher_id
Nos piden SELECCIONAR la SUMA total de reviews en todos los cursos por cada profesor. Es decir:
SELECT teachers.name AS teacher, SUM (courses.n_reviews) AS total_reviews
Piden AGRUPAR por profesores para luego ORDENAR:
GROUP BY courses.teacher_id
ORDENAR de forma DESCENDENTE el total de reviews (total_reviews) que encontramos anteriormente:
ORDER BY total_reviews DESC
Por ultimo, las reviews deben ser mayores a 0. Lo hacemos con HAVING ya que es una coluimna que se genera despues:
HAVING total_reviews > 1
Basandonos en lo anterior, organizando la informacion en el orden correcto (ver la clase anterior) la solucion a la que llegue seria:
SELECT teachers.name AS teacher, SUM(courses.n_reviews) AS total_reviews
FROM teachers
INNER JOIN courses ON teachers.id = courses.teacher_id
GROUP BY courses.teacher_id
HAVING total_reviews > 1
ORDER BY total_reviews DESC;
SELECT
teachers.name AS teacher,
SUM(courses.n_reviews) AS total_reviews
FROM teachers
INNER JOIN courses
ON teachers.id = courses.teacher_id
GROUP BY teacher
ORDER BY total_reviews DESC;
Estan a otro nivel los retos, no pude 😦
Al menos los intenté.
Despues de media hora y dos dias de repaso me salio, lagrimas de felicidad :’)
SELECT teachers.name AS teacher, SUM(courses.n_reviews) AS total_reviews
FROM courses
RIGHT JOIN teachers ON teachers.id = courses.teacher_id
WHERE teacher_id IS NOT NULL
GROUP BY teacher
ORDER BY total_reviews DESC
;
Mi Solución
.
.
.
.
<SELECT teachers.name AS teacher,SUM(courses.n_reviews) AS total_reviews
FROM teachers
inner join courses ON teachers.id = courses.teacher_id
GROUP BY courses.teacher_id
ORDER BY total_reviews DESC;
>
Les comparto el código de la prueba con comentarios de los pasos para que lo puedan entender mejor 😃
Solución… 😄
.
.
.
.
.
.
.
SELECT t.name AS teacher, SUM(c.n_reviews) AS total_reviews
FROM teachers AS t
INNER JOIN courses AS c ON t.id = c.teacher_id
GROUP BY c.teacher_id
ORDER BY total_reviews DESC;
Mi técnica es ir de menos a más… es decir tomo la parte más sencilla del requerimiento y voy probando que funcione, asà le voy agregando las funcionalidades más complejas del requerimiento hasta completarlo, de esta manera en todo momento estoy seguro hasta que punto el desarrollo está funcionando y voy solucionando cada problema o error que se va presentando!
Mi solucion
.
.
.
.
.
.
.
.
.
.
SELECT
teachers.name AS teacher,
SUM(n_reviews) AS total_reviews
FROM teachers
INNER JOIN courses
ON teachers.id = courses.teacher_id
GROUP BY teachers.name
ORDER BY total_reviews DESC;
Fue un reto realmente…
Espero lo intentes pero si te frusta por acá te dejo mi solución, la idea es que puedas analizarlo y no solo transcribir la respuesta.
Les dejo mi solución, me lanza como error pero me sale el mismo resultado.
<select
t.name teacher,
sum(c.n_reviews) total_reviews
FROM teachers t
LEFT JOIN courses c ON t.id = c.teacher_id
WHERE c.teacher_id IS NOT NULL
GROUP BY t.name
ORDER BY total_reviews DESC;
>
Los ejercicios en el playground deberÃan revisarse en la prueba por el resultado que arrojas, ya que si lo haces algo diferente me da error y luego al correr la solución que presentan en el ejercicio obtengo la misma respuesta que con el código que escribÃ, pero igual al correr la prueba me sale que hay errores.
Estos playground son de lo mejor que pudieron hacer en platzi!! te imaginas que tuvieran mas de un ejercicio? o un mega ejercicio complementario tipo entrevista ?
esta de locos !
Mi solución:
SELECT teachers.name AS teacher,SUM(courses.n_reviews) total_reviews
FROM courses
INNER JOIN teachers ON courses.teacher_id = teachers.id
GROUP BY teacher
ORDER BY total_reviews DESC
En mi caso usé la sentencia where/having para considerar la restricción de no contar cursos sin al menos un review. Sé que en este caso es redundante porque los cursos sin reviews implÃcitamente se sumarán como 0 y dará igual el resultado, pero en caso de no contar reviews sino otra columna (como cantidad de cursos por profesor) sà serÃa necesario agregar la restricción.
select
teachers.name as teacher,
sum(courses.n_reviews) as total_reviews
from teachers
inner join courses on teachers.id = courses.teacher_id
where courses.n_reviews >= 1 -- omitir si se usa having y viceversa
group by teacher
--having total_reviews >= 1
order by total_reviews desc;
Con las tablas/entidades abreviadas… 😊
Hola, les comparto mi solución!
SELECT
teachers.name AS teacher,
SUM(courses.n_reviews) AS total_reviews
FROM courses
INNER JOIN teachers
ON courses.teacher_id = teachers.id
GROUP BY teacher
ORDER BY total_reviews DESC;
SELECT teachers.name as teacher, Sum(courses.n_reviews) as total_reviews
from teachers
inner join courses on teachers.id = courses.teacher_id
group by teacher
order by total_reviews desc;
SELECT teachers.name AS teacher, SUM(n_reviews) AS total_reviews
FROM courses
INNER JOIN teachers ON teacher_id = teachers.id
GROUP BY teacher
HAVING total_reviews > 0
ORDER BY total_reviews DESC;
MI SOLUCION CON SU AYUDA ( ’ o ’ )
SELECT
teachers.name AS teacher,
SUM(courses.n_reviews) AS total_reviews
FROM teachers
INNER JOIN courses
ON teachers.id = courses.teacher_id
GROUP BY teacher
ORDER BY total_reviews DESC;
cláusula JOIN, la función SUM y la cláusula GROUP BY
para agrupar los cursos por profesor y luego sumar la cantidad total de reviews de los cursos de cada profesor. Luego, ordenarás los resultados de manera descendente. Aquà está la consulta SQL para lograrlo
Estuvo interesante el reto!
SELECT teachers.name AS teacher, SUM(courses.n_reviews) AS total_reviews
FROM teachers
INNER JOIN courses
ON teachers.id = courses.teacher_id
GROUP BY courses.teacher_id
HAVING total_reviews > 1
ORDER BY total_reviews DESC;
Medio confuso, pero se logró:
SELECT
t.name as teacher,
SUM(n_reviews) AS total_reviews
FROM courses c
LEFT JOIN teachers t ON c.teacher_id = t.id
WHERE t.name IS NOT NULL
GROUP BY t.name
ORDER BY total_reviews DESC;
Perdà una vida pero lo logré, jaja
select c.teacher_id,c.name
from courses c
order by c.teacher_id
Asi se fue XD
SELECT teachers.name AS teacher, sum(courses.n_reviews) AS total_reviews
FROM teachers,courses
WHERE teachers.id = courses.teacher_id
GROUP BY teacher
ORDER BY total_reviews DESC
;
SELECT t.name AS teacher, sum(c.n_reviews) AS total_reviews
FROM teachers AS t, courses AS c
WHERE t.id = c.teacher_id
GROUP BY teacher
ORDER BY total_reviews desc;
buena practica
SELECT
teachers.name AS teacher,
sum(n_reviews) AS total_reviews
FROM
courses
INNER JOIN
teachers ON courses.teacher_id=teachers.id
GROUP BY
teacher_id
ORDER BY
total_reviews DESC
;
Comparto mi solución, el query funciona si omito el WHERE Y HAVING, pero decido dejarlo asà por las condiciones que pide el ejercicio 😃
SELECT teachers.name AS teacher, SUM(n_reviews) AS total_reviews FROM courses
INNER JOIN teachers ON courses.teacher_id = teachers.id
WHERE courses.teacher_id IS NOT NULL
GROUP BY courses.teacher_id
HAVING total_reviews > 1
ORDER BY total_reviews DESC;
Aquà mi aporte con LEFT JOIN
.
.
.
.
.
.
.
SELECT t.name AS teacher,
SUM(c.n_reviews) AS total_reviews
FROM courses AS c
LEFT JOIN teachers AS t
ON c.teacher_id = t.id
WHERE t.id IS NOT NULL
GROUP BY teacher
ORDER BY total_reviews DESC
;
mi aporte
SELECT
teachers.name AS teacher,
SUM(n_reviews) AS total_reviews
FROM courses
LEFT JOIN teachers ON courses.teacher_id = teachers.id
WHERE teacher_id IS NOT NULL
GROUP BY teacher
ORDER BY total_reviews DESC;
SELECT
teachers. name AS teacher ,
SUM(courses. n_reviews) AS total_reviews
FROM teachers
INNER JOIN courses
ON teachers. id = courses.teacher_id
GROUP BY teacher
ORDER BY total_reviews DESC
Buenas tardes muchachos acá están mis aportes
<SELECT
teachers.name AS teacher,
SUM (courses.n_reviews) AS total_reviews
FROM teachers
INNER JOIN courses ON teachers.id = courses.teacher_id
GROUP BY teacher_id
ORDER BY Total_reviews DESC;>
SELECT teachers.name AS teacher, SUM(courses.n_reviews) AS total_reviews FROM teachers
INNER JOIN courses ON teachers.id = courses.teacher_id
GROUP BY teachers.id
ORDER BY total_reviews DESC;
SELECT teachers.name AS teacher,SUM(n_reviews) AS total_reviews
FROM courses
LEFT JOIN teachers ON teacher_id = teachers.id
GROUP BY teacher_id HAVING teacher_id is not null
ORDER BY total_reviews DESC;
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?