Някои предложения:
- Присъединете се към
seasons
веднъж. Обединяването причинява дублиране на редове от лявата таблица, така че те могат да бъдат сумирани два пъти отsum
агрегат. Когато се съмнявате, стартирайте заявката безgroup by
за примерно училище. - Трябва да свържете подзаявката с външната заявка с нещо като
inner_schools.id = outer_schools.id
- Но доколкото виждам, изобщо не се нуждаете от подзаявка
Например:
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
За множество категории можете да използвате случай:
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