Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:somma i valori nelle sottoquery

Alcuni suggerimenti:

  • Unisciti a seasons una volta. Un join fa sì che le righe della tabella di sinistra vengano duplicate, quindi possono essere sommate due volte dal sum aggregato. In caso di dubbio, esegui la query senza group by per una scuola di esempio.
  • Dovresti mettere in relazione la sottoquery con la query esterna con qualcosa come inner_schools.id = outer_schools.id
  • Ma per quanto posso vedere, non hai affatto bisogno di una sottoquery

Ad esempio:

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

Per più categorie, puoi utilizzare 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