Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema de Minimos

Estas en el tema de Problema de Minimos en el foro de SQL Server en Foros del Web. Buenas gente, tengo que hacer una consulta SQL en SQL Server y no tengo idea de como hacerla, y queria saber si me podian dar ...
  #1 (permalink)  
Antiguo 11/09/2007, 07:57
Avatar de [NiRVaNa]  
Fecha de Ingreso: abril-2004
Ubicación: Someplace In The Middle Of Nowhere!
Mensajes: 325
Antigüedad: 20 años
Puntos: 6
Pregunta Problema de Minimos

Buenas gente, tengo que hacer una consulta SQL en SQL Server y no tengo idea de como hacerla, y queria saber si me podian dar una mano.

Suponiendo que tengo una tabla de
- Alumnos
- Materias
- Incripciones

En la cual en la tabla de inscripciones se guarda el identificador del alumno y de la materia.

Ej. Alu 1 - Mat 1
Alu 2 - Mat 1
Alu 3 - Mat 2
Alu 4 - Mat1
Alu 5 - Mat 2
Alu 6 - Mat 3

Necesito que la consulta me diga cual es la materia que menos inscriptos tiene, en teoria tendria que tirarme la materia nº 3.

Pero si yo hago un min() de la columna de materias, me tira el resultado 1, porque es el minimo de todos los numeros, pero yo necesito que se cuenten cuantos inscriptos tiene cada materia y que luego haga el min() sobre ese conteo o algo por el estilo.

Se entiende? Necesito que sea algo general, yo no se cuantas materias tengo...

Espero respuestas... Muchas gracias...
  #2 (permalink)  
Antiguo 11/09/2007, 08:17
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Problema de Minimos

Código:
If object_id('tempdb..#tmpMaterias') is not null Drop Table #tmpMaterias
If object_id('tempdb..#tmpInscripciones') is not null Drop Table #tmpInscripciones

Create table #tmpMaterias (IdMateria Int, NombreMateria varchar(50))
Create table #tmpInscripciones (IdAlumno int, IdMateria int)

Set nocount on
Insert into #tmpMaterias values(1, 'Uno')
Insert into #tmpMaterias values(2, 'Dos')
Insert into #tmpMaterias values(3, 'Tres')
Insert into #tmpInscripciones values (1,1)
Insert into #tmpInscripciones values (2,1)
Insert into #tmpInscripciones values (3,2)
Insert into #tmpInscripciones values (4,1)
Insert into #tmpInscripciones values (5,2)
Insert into #tmpInscripciones values (6,3)

Select M.IdMateria,
       M.NombreMateria
From (Select Top 1 IdMateria
      From #tmpInscripciones 
      Group by IdMateria
      Order by count (1) ) T
Inner join 
      #tmpMaterias M
On    T.IdMateria = M.IdMateria
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 19/09/2007, 07:05
Avatar de drmkace  
Fecha de Ingreso: febrero-2005
Mensajes: 26
Antigüedad: 19 años, 2 meses
Puntos: 0
Re: Problema de Minimos

Hola, Suponiendo que la tabla inscripciones tiene los cmapos idAlumno e idMateria podes hacer el siguiente query, que no es tan ineficiente como el de las tablas temporales (que en este caso son inecesarias.

Código:
SELECT TOP 1 COUNT(idAlumno),idMateria
FROM Inscripciones
GROUP BY idMateria
ORDER BY COUNT(idAlumno) ASC
espero que te sirva. Saludos
  #4 (permalink)  
Antiguo 19/09/2007, 07:58
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Problema de Minimos

Cita:
Iniciado por drmkace Ver Mensaje
Hola, Suponiendo que la tabla inscripciones tiene los cmapos idAlumno e idMateria podes hacer el siguiente query, que no es tan ineficiente como el de las tablas temporales (que en este caso son inecesarias.

Código:
SELECT TOP 1 COUNT(idAlumno),idMateria
FROM Inscripciones
GROUP BY idMateria
ORDER BY COUNT(idAlumno) ASC
espero que te sirva. Saludos
Seran mis ojos o es exactamente el mismo query? jejejeje con la excepcion claro de que se omite la presentacion del nombre de la materia.

Compañero las tablas temporales son solo para generar un ejemplo que cualquiera pueda ejecutar ya que nadie, excepto el solicitante, tiene las tablas fisicas, mismas que serian sustituidas en el select y obviamente no se requeriria la generacion de informacion de prueba.

Un saludo!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:23.