Einige Vorschläge:
- Nehmen Sie an
seasons
teil einmal. Ein Join bewirkt, dass Zeilen aus der linken Tabelle dupliziert werden, sodass sie zweimal durchsum
summiert werden können Aggregat. Führen Sie im Zweifelsfall die Abfrage ohnegroup by
aus für eine Beispielschule. - Sie müssten die Unterabfrage mit etwas wie
inner_schools.id = outer_schools.id
mit der äußeren Abfrage in Beziehung setzen - Aber soweit ich sehen kann, brauchen Sie überhaupt keine Unterabfrage
Zum Beispiel:
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 mehrere Kategorien könnten Sie einen Fall verwenden:
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