Några förslag:
- Gå med på
seasons
en gång. En koppling gör att rader från den vänstra tabellen dupliceras, så de kan summeras två gånger medsum
aggregat. Om du är osäker, kör frågan utan attgroup by
för en exempelskola. - Du måste relatera underfrågan till den yttre frågan med något som
inner_schools.id = outer_schools.id
- Men så vitt jag kan se behöver du ingen underfråga alls
Till exempel:
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
För flera kategorier kan du använda ett fall:
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