Para los que usen SQL de Microsoft hay varios aspectos que cambian.
1.- por default el resultado te aparece sin decimales, tienes que convertir el tipo de tato para que te los muestre.
2.- La forma de hacer las subconsultas, ya que las entiendes se hacen más fácil y no es mas que seguir los pasos del profesor con la diferencia de estructurarte de la manera en que lo entiendas, yo lo hago por fases
A.- Hago un catalogo de todos los nombres concatenando sus apellidos.
B.- Asigno el id y los nombres de Alumnos y Tutores
C.- Hago el conteo de alumnos por tutor
D.- Convierto la columna de alumnos por tutor a float y después le saco el promedio para que esta forma me salga el resultado conforme a lo visto en clase.
Los beneficios es que al tener el código separado, es más fácil hacer un cambio en caso de requerirlo y/o realizar las validaciones pertinentes
<Select-----DAVG(convert(float,D.Alumnos_por_tutor)) promedio_alumnos_por_tutor
from(-----CSelectC.Nombre_Tutor,COUNT(C.id_alumno)Alumnos_por_tutorfrom(-----BSELECT a.id id_alumno
,concat(a.nombre,' ', a.apellido)Nombre_Alumno,tutor_id id_tutor
,b.NombreNombre_TutorFROM[HAHM].[dbo].[platzialumnos] a
inner join(-----ASELECT distinct
[id],concat([nombre],' ',[apellido])NombreFROM[HAHM].[dbo].[platzialumnos]) b on a.tutor_id= b.id)CGroup by
C.Nombre_Tutor)D>
Gracias Humberto.
Aunque el ejercicio está muy fácil, prefiero aprovechar para hacer uso de una buena práctica y es comentar el código, en vez de eliminar el WHERE sólo comentarlo
SELECT pa.nombre, pa.apellido, pa.carrera_id, pc.carreraFROM platzi.alumnosAS pa
LEFTJOIN platzi.carrerasAS pc ON pa.carrera_id= pc.id--WHERE pc.idISNULL--Sólo comentar el WHEREORDERBY pa.carrera_id
Excelente, gracias!
Resolviendo el reto con left join:
SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carreraFROM platzi.alumnosAS a
LEFTJOIN platzi.carrerasAS c
ON a.carrera_id= c.id;
y con Full Outer Join (atentos acá con los null de cursos borrados):
SELECT a.nombre,a.apellido,a.carrera_id, c.id,c.carreraFROM platzi.alumnosAS a
FULLOUTERJOIN platzi.carrerasas c ON c.id= a.carrera_idWHERE a.nombreISNOTNULLORDERBY a.carrera_id;
Resuelto
Usando LEFT JOIN sin ninguna condicion en el WHERE
SELECT carrera_id,COUNT(*)AS cuenta
FROM platzi.alumnosGROUPBY carrera_id
ORDERBY cuenta DESC;SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carreraFROM platzi.alumnosAS a
LEFTJOIN platzi.carrerasAS c
ON a.carrera_id= c.id;
Reto
<code>SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carreraFROM platzi.carrerasAS c
FULLOUTERJOIN platzi.alumnosAS a ON c.id= a.carrera_idORDERBY a.carrera_idDESC;
Un pequeño aporte.
Una buena practica antes de borrar consiste en consultar lo que deseamos borrar, para el ejemplo que uso el profesor tendríamos
select *from platzi.carreraswhere id between 30 and 40;
Luego si reemplazar por el delete.
Para el promedio por tutor, definitivamente utilizaría ROUND, ya que no hay fracciones de personas. En el plano laboral doy ese resultado y termino quedando mal reflejando cosas como fracciones de autos, de personas, etc. Cualquier cosa que en el mundo cotidiano no se exprese en decimales o fracciones.
Hola Marco. Me parece interesante el detalle.
En este caso, al redondear, ¿habría que hacerlo siempre al número mayor para que no se sintiera perjudicada la persona?
Por ejemplo, si fueran vehículos que pasaron por un control. Si pasan en promedio 33.3, ¿habría que ajustar y decir que pasan 33 o 34? Saludos.
Al crear las llaves foráneas lo configure para que los cambios se efectuaran en cascada, por lo cual al borrar las carreras con los id entre 30 y 40, también me elimino los alumnos que tenían dicha carrera, cosas a tener en cuenta que nos pueden agilizar el trabajo o arruinar los datos que tenemos, dependiendo del contexto y lo que necesitemos.
en mi pgadmin se demora muchisimo en hacer las consultas por que sera?
Me pasa lo mismo, leí que es porque quizá consume mucha ram, me ha funcionado cerrarlos y volverlo a abrir, o detener la consulta y volverla a ejecutar. Espero te sirva, saludos
Muchas gracias por la clase. Muy últil, sin embargo hay algo que no me cuadra, tu realizas en el ON la igualación entre carrera_id y id de las dos tablas, pero en el resultado como tal no se aprecia que estas dos columnas sean iguales puesto que una es null y la otra no, aun así se muestran como resultado. ¿Por qué?
SELECTCONCAT(a.nombre,' ',a.apellido), a.carrera_id, c.carreraFROM platzi.alumnosAS a
LEFTJOIN platzi.carrerasAS c
ON a.carrera_id= c.id;
Respuesta al reto: Utilice la sentencia UNION para poder hacer dos JOIN
SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carreraFROM platzi.alumnosAS a
LEFTJOIN platzi.carrerasAS c
ON a.carrera_id= c.idUNIONSELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carreraFROM platzi.alumnosAS a
RIGHTJOIN platzi.carrerasAS c ON a.carrera_id= c.id;
Profe Israel Vázquez Morales, pregunta:
por que antes de borrar algo {lo que sea}
no ocupa las siguientes sentencias?
BEGIN TRAN ROLLBACK TRAN COMMIT TRAN
SELECT tutor_id,AVG(colegiatura)AS promedio_alumnos
FROM platzi.alumnosGROUPBY tutor_id;
En esta consulta, utilizo la función AVG para calcular el promedio de la columna colegiatura para cada tutor_id. La cláusula GROUP BY tutor_id agrupa los resultados por tutor, de modo que obtienes el promedio por cada tutor específico.
Borre 38 filas :(
SELECT a.nombre,
a.apellido,
a.carrera_id,
t .id,
t .carrera
FROM platzi.alumnos AS a
FULL OUTER JOIN platzi.carrera AS c
ON a.carrera_id=c .id
ORDER BY a.carrera_id;
SELECT a_.id, a_.nombre, a_.carrera_id, c_.carrera, c_.idfrom alumnos as a_
LEFTJOIN carreras as c_
on a_.carrera_id= c_.id;
Mi solución al reto:
SELECTAVG(p.alumnos_por_tutor)FROM(SELECTCONCAT(t.nombre,' ', t.apellido)AS tutor,COUNT(*)AS alumnos_por_tutor
FROM platzi.alumnosAS a
INNERJOIN platzi.alumnosAS t
ON a.tutor_id= t.idGROUPBY tutor
ORDERBY alumnos_por_tutor DESC)AS p
Postgre es súper divertido!!! Que ñoño soy que esto me divierte jajajaj :D
SELECT carrera_id,COUNT(*)AS cuenta
FROM platzi.alumnosGROUPBY carrera_id
ORDERBY cuenta DESC;SELECT a.nombre, a.apellido, a.carrera_id, c.id, c.carreraFROM platzi.alumnosAS a
LEFTJOIN platzi.carrerasAS c
ON a.carrera_id= c.id;
esta es la solución al ejercicio del final de la clase:
SELECTCONCAT(a.nombre,' ', a.apellido)AS nombre_completo_alumnos, c.carreraFROM platzi.alumnosAS a
LEFTJOIN platzi.carrerasAS c
ON a.carrera_id= c.idORDERBY c.carrera;