Algunas sugerencias:
- Únete a las
seasons
una vez. Una combinación hace que las filas de la tabla de la izquierda se dupliquen, por lo que se pueden sumar dos veces mediantesum
agregar. En caso de duda, ejecute la consulta singroup by
para una escuela de ejemplo. - Tendría que relacionar la subconsulta con la consulta externa con algo como
inner_schools.id = outer_schools.id
- Pero por lo que puedo ver, no necesita una subconsulta en absoluto
Por ejemplo:
SELECT schools.*
, sum(cashflows.amount) total_branding_cashflow
FROM schools
JOIN seasons
ON seasons.school_id = schools.id
and seasons.year = 2010
JOIN cashflows
ON cashflows.season_id = seasons.id
and cashflow_group_id = 12
GROUP BY
schools.id
HAVING total_branding_cashflow BETWEEN 50000000 AND 100000000
Para varias categorías, podría usar un caso:
SELECT schools.*
, sum(case when cashflow_group_id = 1 then cashflows.amount end) total1
, sum(case when cashflow_group_id = 12 then cashflows.amount end) total12
FROM schools
JOIN seasons
ON seasons.school_id = schools.id
and seasons.year = 2010
JOIN cashflows
ON cashflows.season_id = seasons.id
GROUP BY
schools.id