SELFISH es hacer un JOIN con la propia Tabla.

No necesito tener dos tablas para hacer JOINs, lo puedo hacer con una sola y generando una unión entre ella misma.

CLASE

  1. Hasta ahora hemos dado por hecho que el Tutor_id es de un profesor o de una tabla externa, pero que pasaría si el tutor_id se refiere a otro alumno que está dando tutorías dentro de la misma clase, entonces hacemos un JOIN a través de ese campo.

ALUMNOS QUE SON TUTORES DE OTROS ALUMNOS

SELECT  a.nombre,
				a.apellido,
				t.nombre,
				t.apellido
FROM platzi.alumnos AS a
	INNER JOIN platzi.alumnos AS t ON a.tutor_id = t.id;
SELECT CONCAT(e.nombre, ' ', e.apellido) AS Estudiantes,
	   CONCAT(t.nombre, ' ', t.apellido) AS Tutor
FROM platzi.alumnos AS e
	INNER JOIN platzi.alumnos AS t ON e.tutor_id = t.id;

DOS.png

TRES.png

  1. Ya que tenemos unido el alumno con el tutor, podemos hacer muchas cosas interesantes, como; Agrupar todos los registros esta vez por tutor. ¿Cuántos alumnos tiene asignado cada Tutor?
SELECT  CONCAT(t.nombre, ' ', t.apellido) AS Tutor,
		COUNT(*) AS Estudiantes_por_Tutor
FROM platzi.alumnos AS e
	INNER JOIN platzi.alumnos AS t ON e.tutor_id = t.id
GROUP BY tutor
ORDER BY Estudiantes_por_Tutor DESC
LIMIT 10;

RETO

Sacar el promedio de Alumnos por Tutor.

SELECT AVG(alumnos_por_tutor) AS promedio_alumnos_por_tutor
FROM (
	SELECT  CONCAT(t.nombre, ' ', t.apellido) AS Tutor,
			COUNT(*) AS alumnos_por_tutor
	FROM platzi.alumnos AS a 
		INNER JOIN platzi.alumnos AS t ON a.tutor_id = t.id
	GROUP BY tutor
) AS alumnos_tutor;
SELECT AVG(Estudiantes_por_tutor) AS Promedio_Estudiantes_Por_Tutor
FROM (
	SELECT  CONCAT(t.nombre, ' ', t.apellido) AS Tutor,
			COUNT(*) AS Estudiantes_por_Tutor
	FROM platzi.alumnos AS e
		INNER JOIN platzi.alumnos AS t ON e.tutor_id = t.id
	GROUP BY tutor
	ORDER BY Estudiantes_por_Tutor DESC
) AS Tu_Es;
SELECT ROUND(AVG(conteo),1) AS prom_alumnos_por_tutor
FROM (
	SELECT COUNT(DISTINCT id) AS conteo, tutor_id
	FROM platzi.alumnos
	GROUP BY tutor_id
) AS num_alumnos_por_tutor;