Hola necesito hacer la siguiente consulta. Seleccionar las 10 aulas con mayor numero de alumnos. Aulas es una tabla y alumnos seria otra tabla. Espero que puedan ayudarme.
1 respuesta
Respuesta de mextv
1
1
mextv, Fecha:3/feb/2006 Nombre: Francisco Jose - TV Pais: MEXico Edad:...
¿Qué DMBS? Es SQL server MySQL Access Oracle Etc... ? Saludos Mex-Tv Mexicali Mexico
Access ;)
Ignoro como tengas las tablas pero mira problabelmete el problema principal es extraer solo 10 registros bueno pues espero esto te ayude Para seleccionar una cantidad determinada de registros en Access se utiliza (TOP) SELECT TOP ejemplo: Digamos que la tabla se llama: tbl_Aulas Con los campos Id, Aula, Capacidad Y se quiere hacer la consulta que tu deseas SELECT TOP 10 aula,capacidad FROM tbl_Aulas ORDER BY capacidad DESC; "Seleccionar 10 registros mostrado aula y capacidad ordenados Descendentemente por la capacidad" Esto nos dará los 10 mayores :D Espero ese to sea de ayuda Saludos Mex-Tv Mexicali, Mexico
Bueno vamos bien hasta este punto.. me ha servido tu respuesta.. Pero ahora viene el problemilla Los datos de cuantos alumnos hay en cada salón se obtienen de una sub consulta a la tablas de alumnos. Que se puede hacer de la siguiente forma. SELECT TOP 10 aula, (Select count (*) From tbl_alumnos where Fk_aula = tbl_Aulas.Pk_aulas) AS capacidad FROM tbl_Aulas ORDER BY capacidad DESC; En teoría esto debería ser suficiente... la lógica es exacta y debería ordenarlo... pero Access 97 No me quiere hacer el ordenamiento. No se puede referir a la subconsulta desde la clausula Order By ni por el alias, ni por el nombre real (porque no tiene), ni siquiera colocando ... ORDER BY 2 DESC; (que hace referencia a la segunda columna de la consulta. Estoy varado en este punto ayudame por favor. La única solución (muy poco eficiente) que se me ocurre es extraer los datos completos y sin ordenamiento: SELECT aula, (Select count (*) From tbl_alumnos where Fk_aula = tbl_Aulas.Pk_aulas) AS capacidad FROM tbl_Aulas; Introducir los datos de la consulta uno por uno en una tabla Temporal y después hacer la consulta que me planteabas: SELECT TOP 10 aula, capacidad FROM Temporal ORDER BY capacidad DESC; Pero necesito alternativa mucho más eficiente.
Yo he probado esta consulta y si me ha funcionado: Las tablas están así tbl_alumnos *pk_alumno *Nombre *fk_aula Tbl_aulas *pk_aulas *aula SELECT TOP 10 tbl_aulas.aula, Count(tbl_aulas.aula) AS Total FROM Tbl_alumnos, tbl_aulas WHERE tbl_alumnos.fk_aula=tbl_aulas.pk_aula GROUP BY tbl_aulas.aula ORDER BY Count(tbl_aulas.aula) DESC; La idea es agrupar por aula para poder contar cuantas veces aparece y después ordenarlos Descendentemente Espero eso te sea de ayuda! Saludos Mex-Tv Mexicali, Mexico
Amigo! No lo puedo creer. Que solución! Te agradezco infinitamente! Te voy a calificar con 5 estrellas porque no encontré como ponerte las 5000 ;P Gracias nuevamente