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

Conteo Registros por Grupo para hallar la diferencia con el registro de otra tabla

Estas en el tema de Conteo Registros por Grupo para hallar la diferencia con el registro de otra tabla en el foro de Mysql en Foros del Web. Buenas tardes... Estoy comenzando con el desarrollo de aplicaciones web y para ello requiero realizar una seleccion de una tabla que me permita conocer si ...
  #1 (permalink)  
Antiguo 12/06/2011, 13:41
 
Fecha de Ingreso: abril-2011
Mensajes: 8
Antigüedad: 13 años, 6 meses
Puntos: 1
Conteo Registros por Grupo para hallar la diferencia con el registro de otra tabla

Buenas tardes...

Estoy comenzando con el desarrollo de aplicaciones web y para ello requiero realizar una seleccion de una tabla que me permita conocer si la cantidad de estudiantes ingresada excedio la capacidad de los estudiantes por grupo.

Tengo una tabla llamada grupos donde creo los grupos y les asigno la capacidad de estudiantes que puede existir por cada uno. Por ejemplo

IDGRUPO - CAPACIDAD
(llave primaria)
101 30
102 25

Tengo otra tabla llamada Estudiantegrupo donde puedo ver a que grupo fue asignado el estudiante y el periodo

CODIGO ESTUDIANTE - IDGRUPO - PERIODO
20113555 101 2011

Lo que estoy tratando de hacer es contar los registros de la tabla Estudiantegrupo por cada grupo con

SELECT *,COUNT(*) Conteo FROM Estudiantegrupo GROUP BY idgrupo,periodo

para que despues el resultado de este conteo, que para este caso es igual a 1 me lo reste a la capacidad de estudiantes del grupo, que en este caso seria 30-1 =29. Con ello podria conocer si el grupo esta disponible pero no he podido realizarlo ya que no soy muy experto en consultas MYSQL

Agradecería mucho su colaboracion

Gracias
  #2 (permalink)  
Antiguo 12/06/2011, 17:04
Avatar de IngAndresMartinez  
Fecha de Ingreso: junio-2011
Ubicación: Piedecuesta-Santader-Piedecuesta
Mensajes: 7
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Conteo Registros por Grupo para hallar la diferencia con el registro de ot

Hola que tal, Estuve revisando tu problema y creo que lo puedes relizar una consulta como esta :

Select count(IdGrupo)'Cantidad Estudiantes',Capacidad 'Capacidad Grupo',
(Capacidad-Count(IdGrupo)) 'Cantidad Restante'
from Estudiante,Grupo where IdGrupo=101;

Los campos que estan en rojo son las variables que puedes cambiar

Pero si quieres tener siempre el referente de la cantidad de cupos que estan disponibles en la entidad Grupos sin necesidad de hacer la consulta anterior constantemente , Puedes incorporar un nuevo campo que se llame
CapacidadDisponible y realizar un Trigger para que cada vez que se Ingrese un Estudiante en un Grupo, Me vaya descontando la capacidad disponible

Sería algo como esto:

Las entidades quedarían así :

Drop table if exists Grupo;
Create table Grupo (
Id_Grupo Int,
Capacidad Int,
CapacidadDisponible Int
);

Drop table if exists Estudiante;
Create table Estudiante(
Cod_Estu Int,
IdGrupo Int,
Periodo Int
);

Creas las entidades y paso seguido creamos el Trigger, para que cada vez que realices un Insert en Estudiante la cantidad disponible vaya Disminuyendo por cada estudiante nuevo que se Registre.
Importante: El trigger lo debes crear antes de que realices los Insert, de lo contrario no se modificaran los campos.


Delimiter//
Drop trigger if exists NuevaCapacidadGrupo;//
Create trigger NuevaCapacidadGrupo
After insert on Estudiante
For each row
Update Grupo set CapacidadDisponible=CapacidadDisponible-1 where New.IdGrupo=Id_Grupo;

Espero que te haya servido de ayuda
Espero comentarios.........

Andrés Martinez
  #3 (permalink)  
Antiguo 16/06/2011, 11:09
 
Fecha de Ingreso: abril-2011
Mensajes: 8
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Conteo Registros por Grupo para hallar la diferencia con el registro de ot

Andres, Muchas gracias por la colaboración con la respuesta. Realizare el proceso de esta manera y tan pronto lo tenga le informare del resultado.

Etiquetas: registros
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 08:55.