tengo dos consultas sql
select course from enrolments where student = 101; select count(student) as course from enrolments GROUP by courseEl primero produce una lista de cursos donde está inscrito el estudiante con id 101. El segundo devuelve un recuento total de estudiantes inscritos en cada curso.
¿Cómo obtengo el total de inscripciones para los cursos en los que está inscrito el estudiante 101?
Use bool_or() para asegurarse de having al menos uno de los estudiantes sea 101 en el grupo:
select count(student) as course from enrolments group by course having bool_or(student = 101) Para una solución menos específica de PostgreSQL, necesitaría usar JOIN (o EXISTS ). Algo como esto:
select count(student) as course from enrolments e where exists(select 1 from enrolments s where s.course = e.course and s.student = 101) group by courseOriginalmente entendí mal la pregunta. Aquí hay un enfoque que utiliza dos niveles de agregación:
select sum(numstudents) from (select course, count(*) as numstudents from enrolments group by course having sum( (student = 1)::int) > 0 ) c;La subconsulta obtiene el valor por curso.
Parece que solo tiene que agregar la condición 'dónde' a su segunda consulta:
SELECT count(student) as course FROM enrolments WHERE student = 101 GROUP by course;