Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:Summenwerte in Unterabfragen

Einige Vorschläge:

  • Nehmen Sie an seasons teil einmal. Ein Join bewirkt, dass Zeilen aus der linken Tabelle dupliziert werden, sodass sie zweimal durch sum summiert werden können Aggregat. Führen Sie im Zweifelsfall die Abfrage ohne group 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